Docker ENTRYPOINT在卷装入后运行

时间:2017-07-11 07:03:13

标签: linux docker docker-compose dockerfile

我的Dockerfile有一个在ENTRYPOINT上运行的脚本。 该容器计划在我的代码所在的卷挂载下运行,并且一旦容器启动了卷挂载,它就需要运行几个命令。

但是从运行容器时遇到的错误,我相信在ENTRYPOINT脚本之后就会发生Docker卷装。

一旦容器启动,我确定可以使用 docker exec 选项运行命令。但这使得它更多的运行命令行。有没有解决办法,即使使用docker-compose?

Dockerfile:

FROM my-container
WORKDIR /my-mount-dir

ADD startup-script.sh /root/startup-script.sh
ENTRYPOINT ["/root/startup-script.sh"]

Docker运行:

docker run -itd -v / home / user / directory:/ my-mount-dir build-container

注意: startup-script.sh包含应该在已安装的目录文件上运行的命令。

2 个答案:

答案 0 :(得分:5)

我不确定这是否是您想要的解决方案,但我一直在使用此命令,该命令使用cat命令将script.sh提供给容器:

docker run -it --name=some_name --rm \
  -v "host/path:/path/inside/container" \
  image_name \
  /bin/bash  -c "$(cat ./script.sh)"

在这种情况下,脚本在安装完成后运行。我确信这一点,因为我已经使用了脚本中挂载的卷中的文件。

答案 1 :(得分:0)

我已经在我的一些脚本中看到了这一点,这对我来说似乎是文件系统缓存问题...我在docker文件中使用了以下hack,它的工作原理很像魅力:

ENTRYPOINT ls /my-mount-dir && /root/startup-script.sh

但是您不能使用ENTRYPOINT的列表形式