我的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包含应该在已安装的目录文件上运行的命令。
答案 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的列表形式