Я следовал этому руководству , чтобы запустить контейнер от имени пользователя без полномочий 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 , контейнеры могут быть запущены от имени пользователя 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"