1. 程式人生 > >docker-compose中啟動映象失敗的問題

docker-compose中啟動映象失敗的問題

解決docker-compose啟動映象失敗的問題;

正常的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命令,發現新建了一個容器,狀態正常;