相关文章推荐
狂野的小蝌蚪  ·  python ...·  2 年前    · 
想表白的仙人掌  ·  android ...·  2 年前    · 
面冷心慈的夕阳  ·  Ubik - OSCHINA - ...·  2 年前    · 

解决docker-compose启动镜像失败的问题;

原文地址: http://blog.csdn.net/boling_cavalry/article/details/79050451

正常的docker run启动

** java:8u111-jdk **是java官方镜像,如下命令可以成功启动一个该镜像的容器:

 docker run --name test001 -idt java:8u111-jdk

以上命令创建的容器,可用docker exec -it test001 /bin/bash进入容器,执行我们所需的操作;

docker-compose启动失败

这里写个最简单的docker-compose.yml,然后用docker-compse,内容如下:

master:
  image: java:8u111-jdk

在此文件所在目录下执行docker-compose up -d启动容器,再执行docker ps -a查看容器状态,信息如下所示:

root@rabbitmq:/usr/local/work/test# docker-compose up -d
Creating test_master_1 ... done
root@rabbitmq:/usr/local/work/test# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
bb433fe9984d        java:8u111-jdk      "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       test_master_1

信息显示我们启动的容器状态为Exited (0) About a minute ago,也就是说虽然创建了容器,但是该容器并未正常运行;

控制终端缺失

启动失败是因为缺失了控制终端的配置,这里有两种方式修复;

使用tty参数(推荐使用)

修改docker-compose.yml,增加一个配置tty:true,如下:

master:
  image: java:8u111-jdk
  tty: true

先执行docker-compose down将之前的容器删除,再执行docker-compose up -d启动,可以发现启动成功,并且可以成功进入容器进行操作:

root@rabbitmq:/usr/local/work/test# docker-compose up -d
Creating test_master_1 ... done
root@rabbitmq:/usr/local/work/test# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f51debaa26ec        java:8u111-jdk      "/bin/bash"         2 seconds ago       Up 2 seconds                            test_master_1
root@rabbitmq:/usr/local/work/test# docker exec -it test_master_1 /bin/bash
root@f51debaa26ec:/# java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)

使用exec重新创建容器(不推荐)

这种方式并不推荐,因为这样做虽然可以启动容器,但是只能重新创建一个容器,具体方法如下:

  1. 使用docker-compose up -d命令启动后,由于没有tty:true的配置,容器就退出了;
  2. 这时候执行命令docker-compose run master /bin/bash,会创建一个容器,并且进入这个容器;
  3. 在当前电脑再打开一个控制台,执行docker ps命令,发现新建了一个容器,状态正常;

欢迎关注我的公众号:程序员欣宸

解决docker-compose启动镜像失败的问题;原文地址:http://blog.csdn.net/boling_cavalry/article/details/79050451正常的docker run启动java:8u111-jdk是java官方镜像,如下命令可以成功启动一个该镜像的容器: docker run --name test001 -idt java:8u
以solr8.11.1为基础镜像,使用docker-compose构建含文分词器的新的镜像 文件夹内含有docker-compose.yml脚本、Dockerfile脚本以及构建镜像所需文分词器ik-analyzer-8.5.0.jar、所有扩展词和停用词相关的配置文件 docker-compose up -d solr 快速启动
- ../Site:/data/www:rw - ./php8/cert:/data/cert:ro - ./php8/php-fpm.d:/usr/local/etc/php-fpm.d:rw - ./php8/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ./php8/php-dev.ini:/usr/local/etc/php/php.ini:ro - ../logs/php8-fpm:/var/log/php-fpm:rw - ./php8/.ssh:/home/www/.ssh:ro - ./php8/supervisor.conf:/etc/supervisor/conf.d:ro - ../logs/socket:/var/log/socket:rw - ../logs/queue:/var/log/queue:rw environment: XDEBUG_CONFIG: remote_host=host.docker.internal restart: always command: php-fpm 一、什么是Docker镜像镜像是构建 Docker 的基石。用户基于镜像来运行自己的容器。镜像也是 Docker 生命周 期的“构建”部分。也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。 二、什么是Docker容器? 容器是基于镜像启动起来的,容器可以运行一个或多个进程。我们可以认为,镜像Docker生命周期的构建或者打包阶段,而容器则是... 可使用以下命令,查看 Docker 是否安装成功: 1 # docker version 若输出了 Docker 的版本号,则说明安装成功了,可通过以下命令启动 Docker 服务: 1 # syste
前言: 使用docker compose up -d 出现Creating network “docker-zookeeper_default” with the default driver ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-bd34eba317ce -j RETURN: iptables:
在上面的例子,当你使用 `docker-compose up` 命令启动 `myservice` 服务时,它会运行 `python -u my_script.py` 命令。 注意,如果你在 `Dockerfile` 使用了 `CMD` 指令指定默认命令,那么 `command` 关键字的命令会覆盖 `CMD` 指令的命令。
weixin_43111152: 我用OpenJdk19测试了虚拟线程,可以正常使用threadloacl,比较奇怪博主的结论. [code=java] private static void virtualThreadLocal() { name.set("main" + Thread.currentThread().threadId()); System.out.println(name.get()); for (int i = 0; i < 1000; i++) { int finalI = i; Thread.ofVirtual().factory().newThread(() -> { name.set(String.valueOf(Thread.currentThread().threadId())); try { Thread.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); System.out.println(Thread.currentThread() + " = " + name.get()); }).start(); public static final ThreadLocal<String> name = new ThreadLocal<>(); [/code] Golang流媒体实战之七:hls拉流服务源码阅读 programmer_ada: 恭喜你这篇博客进入【CSDN一周精选】榜单,全部的排名请看 https://bbs.csdn.net/topics/614690782。