如果以非root用户身份运行,则Docker容器会立即退出

时间:2019-01-03 14:34:23

标签: docker

我正在遵循此guide以非root用户身份运行容器。用户gpadmin已在图像中创建。

但是,如果我运行以下命令,容器将立即退出:

root@dev01:~# docker run -i -d -v /tmp/$(mktemp -d):/run -p 5432:5432 -p 28080:28080 --user gpadmin --name  gpcentos-dev --hostname mdw gpdb-postgres9.4/centos /usr/sbin/sshd -D
adcaf577c0a589987b556824a3413c74381dfe4d9347467891cf47ac18b91743
root@dev01:~# docker ps -l
CONTAINER ID        IMAGE                     COMMAND               CREATED             STATUS                     PORTS               NAMES
adcaf577c0a5        gpdb-postgres9.4/centos   "/usr/sbin/sshd -D"   4 seconds ago       Exited (1) 2 seconds ago                       gpcentos-dev

但是,当我跳过--user gpadmin运行命令时,容器不会立即退出。

root@dev01:~# docker run -i -d -v /tmp/$(mktemp -d):/run -p 5432:5432 -p 28080:28080 --name  gpcentos-dev --hostname mdw gpdb-postgres9.4/centos /usr/sbin/sshd -D
24f00ec4e531168fb266e7f4616e5fa8f2829112132de211392a9040a0f52d5f
root@dev01:~# docker ps -l
CONTAINER ID        IMAGE                     COMMAND               CREATED             STATUS              PORTS                                                              NAMES
24f00ec4e531        gpdb-postgres9.4/centos   "/usr/sbin/sshd -D"   8 seconds ago       Up 7 seconds        22/tcp, 0.0.0.0:5432->5432/tcp, 80/tcp, 0.0.0.0:28080->28080/tcp   gpcentos-dev

据我了解,-i -t -d应该使容器在后台运行。

编辑1:基于docker best practices的链接,容器可以root身份运行。但是,所有服务应使用服务用户运行。因此,我创建了一个gpadmin用户来启动数据库。

docker run -i -d -v /tmp/$(mktemp -d):/run -p 5432:5432 -p 28080:28080 --name  gpdb-centos --hostname mdw gpdb-postgres9.4/centos /usr/sbin/sshd -D
docker exec -it gpdb-centos sh -c "su - gpadmin -c 'echo 'y' | /home/gpadmin/greenplum_start.sh' && hostname -i"

1 个答案:

答案 0 :(得分:-1)

-i -t -d选项告诉docker为输入配置文件描述符,将输入配置为伪tty(终端),并将该容器与当前命令提示符分离。它不能保证容器将继续运行,这取决于您在容器内运行的命令。

从您的输出中,您正在运行的命令似乎是“ / usr / sbin / sshd -D”,需要root访问权限才能绑定到端口22,读取/ etc中的配置文件以及写入/ var中的文件。

要调试容器内失败的命令,应查看日志并检查容器以查看失败的原因以及原因。的命令是:

docker logs $container_id
docker inspect $container_id

在您的示例中,$container_id将为24f00ec4e531