我正在尝试从 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
and尝试了一些变化su-exec
,但我仍然在上面。我需要在启动时向 UWSGI 提供我的 PEM 密码,所以我一直在使用如下语法:
echo $PEM_PASSPHRASE | exec uwsgi --ini /opt/mysite/uwsgi.ini
这可以很好地启动和运行,但我仍然让 PID 1/bin/bash
进程运行,UWSGI 进程作为下面的子进程。我觉得我错过了一些明显的细节来实际让 bash 进程被 UWSGI 进程通过exec
.
对于它的价值,我只在 Dockerfile 中使用 ENTRYPOINT,而不是 CMD:
ENTRYPOINT ["docker-entrypoint.sh"]
任何指向正确方向的指针将不胜感激。