【发布时间】:2019-01-07 19:42:55
【问题描述】:
我正在关注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"
【问题讨论】:
标签: docker