使用自定义Shell脚本作为Docker入口点

Nut*_*tim 5 docker docker-compose devops

我正在尝试使用docker-compose来启动一个容器。作为ENTRYPOINT,该容器具有我编写的简单bash脚本。现在,当我尝试通过以下任何一种方式调高容器时:

  • docker-compose up
  • docker-compose up foo

它没有完成。即,尝试将(docker exec -i -t $1 /bin/bash)附加到正在运行的容器,失败,并显示:

来自守护程序的错误响应:容器xyz正在重新启动,请等待容器运行。

我尝试在后台放置命令。那没用。

我的脚本

cmd1 &
cmd2 &&
...
cmdn &
Run Code Online (Sandbox Code Playgroud)

我也试过我)与不entrypoint: /bin/sh /usr/local/bin/my-script.shII)有和没有的tty: true选项。没有骰子。

docker-compose.yml

version: '2'
services:
  foo:
    build:
      context: .
      dockerfile: Dockerfile.foo
    ...
    tty: true
    entrypoint: /bin/sh /usr/local/bin/my-script.sh
Run Code Online (Sandbox Code Playgroud)

还尝试了仅手动的docker构建/运行周期。并且(无需/bin/shENTRYPOINT中启动)运行将退出。

$ docker build ... .
$ docker run -it ... 
... shell echos commands here, then exits
$
Run Code Online (Sandbox Code Playgroud)

我敢肯定这很简单。这里有什么解决方案?

chi*_*kar 3

首先,您需要放置一些无限的东西来继续在后台运行您的容器,就像您可以tail -f application.log或类似的东西一样,这样即使您从容器bash中退出,它也会继续在后台运行

您不需要cmd1 & cmd2 &&...cmdn &只将这样的一个命令touch 1.txt && tail -f 1.txt作为最后一步放在my-script.sh. 它将继续运行您的容器。您还需要更改的一件事是docker run -it -d -d将以后台模式启动容器。如果您想进入容器而不是docker exec -it container_name/id bash调试问题并退出。它仍然会保持您的容器运行,直到您停止运行,docker stop container_id/name 希望有所帮助。谢谢你!

  • 好的。放入阻止命令(“touch 1.txt && tail -f 1.txt”)可以解决该问题。大家干杯。 (2认同)