使用自定义shell脚本作为docker入口点

我正在尝试使用docker-compose来调出一个容器。 作为一个入口点 ,那个容器有一个我写的简单的bash脚本。 现在,当我尝试以下列方式调出容器时:

  • docker-compose up
  • docker-compose up foo

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

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

我尝试着把命令放在后台。 这没有用。

my-script.sh

 cmd1 & cmd2 && ... cmdn & 

我也尝试了i)有和没有entrypoint: /bin/sh /usr/local/bin/my-script.shii)有和没有tty: true选项。 没有骰子。

泊坞窗,compose.yml

 version: '2' services: foo: build: context: . dockerfile: Dockerfile.foo ... tty: true entrypoint: /bin/sh /usr/local/bin/my-script.sh 

也尝试了一个手动dockerbuild设/运行周期。 并且(在入口点没有启动/bin/sh )运行只是退出。

 $ docker build ... . $ docker run -it ... ... shell echos commands here, then exits $ 

我确定它很简单。 这里有什么解决scheme?

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

你不需要做cmd1 & cmd2 &&...cmdn &只需cmd1 & cmd2 &&...cmdn &这样一个命令放在这里touch 1.txt && tail -f 1.txt作为my-script.sh的最后一步。 它将继续运行你的容器。 还有一件事是你需要改变的是docker run -it -d -it docker run -it -d -d将启动与背景模式的容器。如果你想进入你的容器比docker exec -it container_name/id bash -it docker exec -it container_name/id bashdebugging问题和exit.It将仍然保持你的容器运行,直到你停docker stop container_id/name希望这个帮助。 谢谢!

docker-compose.yml entrypoint docker-compose.yml只需要

 entrypoint: /usr/local/bin/my-script.sh 

只要添加#! /bin/sh #! /bin/sh到脚本的顶部来指定要使用的shell。

您还需要将exec "$@"添加到入口点脚本的底部,否则将立即退出,这将终止该容器。