为什么docker在启动后立即组成退出?

时间:2017-06-02 09:05:56

标签: docker docker-compose

我正在尝试配置docker-compose以在Ubuntu 16.04中使用GreenPlum db。这是我的docker-compose.yml:

version: '2'
services:
    greenplum:
        image: "pivotaldata/gpdb-base"
        ports:
            - "5432:5432"
        volumes:
            - gp_data:/tmp/gp

volumes:
    gp_data:

问题是当我用sudo docker-compose up运行它时,GrrenPlum db在启动后立即关闭。它看起来像这样:

greenplum_1  | 20170602:09:01:01:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-Starting Master instance 72ba20be3774 directory /gpdata/master/gpseg-1 
greenplum_1  | 20170602:09:01:02:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-Command pg_ctl reports Master 72ba20be3774 instance active
greenplum_1  | 20170602:09:01:02:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-No standby master configured.  skipping...
greenplum_1  | 20170602:09:01:02:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-Database successfully started
greenplum_1  | ALTER ROLE
dockergreenplumn_greenplum_1 exited with code 0  <<----- Here

实际上,当我用sudo docker run pivotaldata/gpdb-base启动时,它没问题。

docker撰写有什么问题?

1 个答案:

答案 0 :(得分:2)

首先,谨慎运行此图片:图片看起来维护得很糟糕,the information on Docker Hub表示它既没有&#34;官方&#34;,也不支持&#34;以任何方式;

  

2017-01-09:Toolsmiths评论了这张图片;它不是我们创造的。我们不承诺这是最新的还是有效的。如果您是所有者,请随时发送电子邮件至pa-toolsmiths@pivotal.io,并有兴趣与我们合作。

使用Docker Hub中的图像时,建议使用官方图像,或者在不可用时,更喜欢自动构建(在这种情况下,可以验证图像的源代码)看看用于构建图像的内容。)

认为图像是从this GitHub repository构建的,这意味着它已经超过一年没有更新,并使用过时的(CentOS 6.7)基础图像{{3} }

回到你的问题;

我尝试使用docker-composedocker run启动图片,两者对我来说都是一样的。

查看该图像,它被设计为以交互方式运行,或用作基本图像(并覆盖命令)。

我检查了图像以找出容器的命令是什么;

docker inspect --format='{{json .Config.Cmd}}'  pivotaldata/gpdb-base
["/bin/sh","-c","echo \"127.0.0.1 $(cat ~/orig_hostname)\" >> /etc/hosts         && service sshd start         && su gpadmin -l -c \"/usr/local/bin/run.sh\"         && /bin/bash"]

所以,这就是容器启动时执行的内容;

echo "127.0.0.1 $(cat ~/orig_hostname)" >> /etc/hosts \
&& service sshd start \
&& su gpadmin -l -c "/usr/local/bin/run.sh" \
&& /bin/bash"

基于以上所述,没有&#34;前景&#34;在容器中处理,所以当/usr/local/bin/run.sh完成时,启动bash shell。附加bash的{​​{1}}外壳会立即退出,此时容器会退出。

运行此图像

(再次;谨慎运行此图片)

通过传递图像以交互方式传递<{1}}和ttystdintty作为速记); < / p>

-i -t

可以运行它&#34;分离&#34;,只要传递-it(添加docker run -it pivotaldata/gpdb-base tty标志,或-d作为简写);这样做,使容器在后台运行;

-t

要在-dt中执行相同操作,请在服务中添加docker run -dit pivotaldata/gpdb-base ;

docker-compose

您的撰写文件将如下所示;

tty