Dockerfile
FROM centos:7
COPY docker-entrypoint.sh /data/
ENTRYPOINT ["/data/docker-entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
docker-entrypoint.sh
exec /usr/sbin/init && systemctl restart autofs %% python /data/myapp.py
Run Code Online (Sandbox Code Playgroud)
我需要/usr/sbin/init作为第一个命令运行,然后运行后续命令,如systemctl restart autofs和python myapp.py
我似乎无法让所有工作在docker-entrypoint.sh内部因为/usr/sbin/init不返回
如果我将docker-entrypoint.sh更改为
/usr/sbin/init &
systemctl restart autofs && python /data/myapp.py
Run Code Online (Sandbox Code Playgroud)
它在d-bus中失败并出错
我能做什么,容器运行/usr/sbin/init,systemctl restart autofs并按python /data/myapp.py顺序执行"docker run"时?
/usr/sbin/init执行后是否还有其他方法可以运行命令?我已经尝试将systemctl作为CMD放在Dockerfile中
FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]
Run Code Online (Sandbox Code Playgroud)
但CMD永远不会被执行
声明
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl"]
Run Code Online (Sandbox Code Playgroud)
将导致:
/usr/sbin/init systemctl
Run Code Online (Sandbox Code Playgroud)
换句话说,该ENTRYPOINT指令设置可执行文件,该可执行文件用于执行从指令给出的COMMAND命令.
默认情况ENTRYPOINT是/bin/sh -c这样/bin/sh -c /data/docker-entrypoint.sh,如果/data/docker-entrypoint.sh包含:
/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
Run Code Online (Sandbox Code Playgroud)
这意味着:你不必改变 ENTRYPOINT
如果更改了ENTRYPOINT到/data/docker-entrypoint.sh比它应该包含这样的内容:
/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
# run the command given as arguments from CMD
exec "$@"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8858 次 |
| 最近记录: |