Vin*_*eth 2 linux docker dockerfile docker-compose
我的Dockerfile有一个可以在ENTRYPOINT上运行的脚本。计划将容器与我的代码所在的卷安装一起运行,一旦容器通过卷安装启动,它就需要运行几个命令。
但是从运行容器时收到的错误来看,我相信Docker卷安装会在ENTRYPOINT脚本之后进行。
一旦容器启动,我确定可以使用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"]
Run Code Online (Sandbox Code Playgroud)
Docker运行:
docker运行-itd -v / home / user / directory:/ my-mount-dir build-container
注意: startup-script.sh包含应该在已安装的目录文件上运行的命令。
入口点脚本在卷安装后运行。我遇到了类似的问题,但实际上是由于在入口点周围使用单引号而不是双引号造成的。因此,容器会回退到使用 的默认入口点/bin/sh。由于您的问题已经得到解答,我将把这个留给通过 Google 最终到达这里的其他人。
这:
ENTRYPOINT ["entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
不是这个:
ENTRYPOINT ['entrypoint.sh']
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是您想要的解决方案,但我一直在使用此运行命令,该命令使用cat命令将我的信息提供script.sh给容器:
docker run -it --name=some_name --rm \
-v "host/path:/path/inside/container" \
image_name \
/bin/bash -c "$(cat ./script.sh)"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,脚本将在安装完成后运行。我可以肯定这一点,因为我已经在脚本中使用了已装入卷中的文件。
我在我的一些脚本中看到了这一点,对我来说这看起来像是文件系统缓存问题...我在我的 docker 文件中使用了以下 hack,它的工作原理就像一个魅力:
ENTRYPOINT ls /my-mount-dir && /root/startup-script.sh
但是你不能使用 ENTRYPOINT 的列表形式
| 归档时间: |
|
| 查看次数: |
7375 次 |
| 最近记录: |