【发布时间】:2020-01-03 22:16:19
【问题描述】:
我正在尝试从 Docker 容器运行 UWSGI 服务器。我已经取得了成功,但是我遇到了一个问题,因为我的入口点脚本在容器启动后仍将以 PID 1 的 root 身份运行,而我宁愿将初始的 /bin/bash 进程替换为 UWSGI 进程:
bash-4.4# ps aux
PID USER TIME COMMAND
1 root 0:00 {docker-entrypoi} /bin/bash /usr/local/bin/docker-entrypoint.sh
19 myuser 0:00 uwsgi --ini /opt/mysite/uwsgi.ini
21 myuser 0:00 uwsgi --ini /opt/mysite/uwsgi.ini
22 myuser 0:00 uwsgi --ini /opt/mysite/uwsgi.ini
24 myuser 0:02 python3 ./manage.py qcluster
28 myuser 0:00 python3 ./manage.py qcluster
29 myuser 0:00 python3 ./manage.py qcluster
30 myuser 0:00 python3 ./manage.py qcluster
31 myuser 0:00 python3 ./manage.py qcluster
32 myuser 0:00 python3 ./manage.py qcluster
33 myuser 0:00 python3 ./manage.py qcluster
34 myuser 0:00 python3 ./manage.py qcluster
我已经尝试了exec 和su-exec 的一些变化,但我仍然遇到上述问题。我需要在启动时向 UWSGI 提供我的 PEM 密码,所以我一直在使用如下语法:
echo $PEM_PASSPHRASE | exec uwsgi --ini /opt/mysite/uwsgi.ini
这可以正常启动和运行,但我仍然让 PID 1 /bin/bash 进程运行,UWSGI 进程作为下面的子进程。我觉得我遗漏了一些明显的细节,无法通过exec 将 bash 进程替换为 UWSGI 进程。
不管怎样,我只在 Dockerfile 中使用 ENTRYPOINT,而不是 CMD:
ENTRYPOINT ["docker-entrypoint.sh"]
任何正确方向的指针将不胜感激。
【问题讨论】:
标签: bash docker uwsgi docker-entrypoint