Dockerfile
FROM centos:7
COPY docker-entrypoint.sh /data/
ENTRYPOINT ["/data/docker-entrypoint.sh"]
docker-entrypoint.sh
exec /usr/sbin/init && systemctl restart autofs %% python /data/myapp.py
我需要运行/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
它在d-bus中失败并显示错误
当我执行“docker run”时,我能做什么才能使容器以该顺序运行/usr/sbin/init
,systemctl restart autofs
和python /data/myapp.py
?
执行/usr/sbin/init
后是否还有其他方法可以运行命令?
我已经尝试将systemctl作为CMD放入Dockerfile
FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]
但CMD永远不会被执行
答案 0 :(得分:6)
声明
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl"]
将导致:
/usr/sbin/init systemctl
换句话说,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
应该有效:
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 "$@"
,则应该包含以下内容:
15