Docker ENTRYPOINT在卷挂载后运行

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包含应该在已安装的目录文件上运行的命令。

Ger*_*y C 7

入口点脚本在卷安装后运行。我遇到了类似的问题,但实际上是由于在入口点周围使用单引号而不是双引号造成的。因此,容器会回退到使用 的默认入口点/bin/sh。由于您的问题已经得到解答,我将把这个留给通过 Google 最终到达这里的其他人。

这:

ENTRYPOINT ["entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

不是这个:

ENTRYPOINT ['entrypoint.sh']
Run Code Online (Sandbox Code Playgroud)


Ayu*_*hya 6

我不确定这是否是您想要的解决方案,但我一直在使用此运行命令,该命令使用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)

在这种情况下,脚本将在安装完成后运行。我可以肯定这一点,因为我已经在脚本中使用了已装入卷中的文件。


Bla*_*hor 5

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

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

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

  • 这对我有用!当我尝试将脚本作为通过卷映射的入口点执行时 - 它是不可见的。但是当我第一次列出该卷中的文件然后执行时 - 它起作用了。 (2认同)