Dockerfile:运行/ usr / sbin / init

时间:2018-02-10 11:06:03

标签: docker dockerfile

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 autofspython 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/initsystemctl restart autofspython /data/myapp.py

执行/usr/sbin/init后是否还有其他方法可以运行命令? 我已经尝试将systemctl作为CMD放入Dockerfile

FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]

但CMD永远不会被执行

1 个答案:

答案 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

reference