使用自定义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.sh
和ii)有和没有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 bash
debugging问题和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 "$@"
添加到入口点脚本的底部,否则将立即退出,这将终止该容器。