somedockerhub/backend-base
具有ENTRYPOINT ["entrypoint.sh"]
其中entrypoint.sh
是:
#!/bin/bash
. /appenv/bin/activate
exec $@
以下是docker-compose文件:
app:
build: ../../
dockerfile: docker/release/Dockerfile
links:
- dbc
volumes_from:
- webroot
environment:
DJANGO_SETTINGS_MODULE: todobackend.settings.release
MYSQL_HOST: db
MYSQL_USER: user1
MYSQL_PASSWORD: passwd
command:
- uwsgi
- "--socket /var/www/someapp/someapp.sock"
- "--chmod-socket=666"
- "--module someapp.wsgi"
- "--master"
- "--die-on-term"
其中docker/release/Dockerfile
:
FROM somedockerhub/backend-base:latest
# Copy application artifacts
COPY target /wheelhouse
# Install application
RUN . /appenv/bin/activate && \
pip install --no-index -f /wheelhouse someapp
rm -rf /wheelhouse
ENTRYPOINT ["echo"]
1)
对于app
服务启动的容器
ENTRYPOINT ["entrypoint.sh"]
是否在ENTRYPOINT ["echo"]
之前执行?
2)
假设当前图像中没有入口点,当前图像是否执行基本图像入口点,然后
command
指令启动uwsgi
进程为pid 1?
答案 0 :(得分:1)
对于由应用服务启动的容器
在ENTRYPOINT之前执行ENTRYPOINT [“ entrypoint.sh”]吗? [“ echo”]?
否,ENTRYPOINT ["echo"]
会覆盖基本图像的ENTRYPOINT ["entrypoint.sh"]
。
因此ENTRYPOINT ["echo"]
将运行并收到:
command:
- uwsgi
- "--socket /var/www/someapp/someapp.sock"
- "--chmod-socket=666"
- "--module someapp.wsgi"
- "--master"
- "--die-on-term"
作为参数
假设当前图像中没有入口点,当前图像是否存在 执行基本映像入口点,然后启动命令指令 uwsgi进程是否为pid 1?
是的,entrypoint.sh
将运行。它将接收command
值作为参数。
entrypoint
代码exec $@
的意思是:执行所有脚本(enterypoint.sh
)自变量(uwsgi...)
。
exec
不会生成新进程,而是将uwsgi
加载到现有进程的内存中。由于exec
进程是使用pid 1启动的,因此uwsgi
将收到pid 1。