Exec不替换Docker入口点脚本中的bash shell

问题描述 投票:0回答:1

我正在尝试从Docker容器运行UWSGI服务器。我已经取得了成功,但是我遇到了麻烦,因为我希望将初始/bin/bash进程替换为UWSGI进程后,容器启动后,我的入口点脚本仍将以PID 1作为root用户运行:

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

我已经尝试过使用execsu-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
1个回答
0
投票

您拥有的命令将被放置为ENTRYPOINT,因为它的命令将是第一个过程。 (我假设您是从docker-entrypoint.sh内部调用它的)

ENTRYPOINT ["echo $PEM_PASSPHRASE | exec uwsgi --ini /opt/mysite/uwsgi.ini"]

© www.soinside.com 2019 - 2024. All rights reserved.