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

为什么docker compose在启动后立即退出?,docker,docker-compose,Docker,Docker Compose,我正试图在Ubuntu 16.04中配置使用GreenPlumdb。这是我的docker-compose.yml: version: '2' services: greenplum: image: "pivotaldata/gpdb-base" ports: - "5432:5432" volumes: - gp_data:/tmp/gp volumes: gp_data: 问题是

我正试图在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
greenplum_1 | 20170602:09:01:01:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-启动主实例72ba20be3774目录/gpdata/Master/gpseg-1
greenplum_1 | 20170602:09:01:02:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-Command pg_ctl reports Master 72ba20be3774实例处于活动状态
greenplum_1 | 20170602:09:01:02:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-未配置备用主机。跳过
greenplum_1 | 20170602:09:01:02:000050 gpstart:e1ae49da386c:gpadmin-[INFO]:-数据库已成功启动
绿梅|1|改变角色

dockergreenplumn\u greenplum\u 1退出,代码为0首先,运行此图像时要小心:该图像看起来维护不好,表明它既不是“官方”,也不是“受支持的”

2017-01-09:工具匠检查了这张图片;它不是我们创造的。我们没有承诺这是最新的还是有效的。请随时给pa发电子邮件-toolsmiths@pivotal.io如果您是这张图片的所有者并且有兴趣与我们合作

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

我认为该映像是从中构建的,这意味着它已经有一年多没有更新了,并且使用了过时的(CentOS 6.7)基础映像

回到你的问题上来; 我试着用
docker-compose
docker-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"
基于上述情况,容器中没有“前台”进程,因此当
/usr/local/bin/run.sh
完成时,启动
bash
shell。没有附加
tty
bash
shell WO立即退出,此时容器退出

运行此映像 (再次强调;运行此图像时要小心)

通过传递图像
stdin
tty
-i-t
,或
-it
作为速记)以交互方式运行图像

或者可以“分离”运行它,只要同时传递了
tty
(添加
-d
-t
标志,或者将
-dt
作为缩写);这样做,使容器在后台运行

docker run -dit pivotaldata/gpdb-base
要在
docker compose
中执行相同操作,请在您的服务中添加
tty

tty: true
然后,您的撰写文件将如下所示:

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

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

volumes:
    gp_data: