我在docker-compse.yml中运行了很多服务。我想显示一条消息,让用户知道docker-compose完成后? 我试图用命令回显消息,但我的容器退出代码0
command: bash -c "echo Congratulation! You can use your containers now"
有没有让用户知道docker-compose完成的时间? 非常感谢!
答案 0 :(得分:1)
创建一个包含的shell文件echo.sh echo"您的留言"
在Docker文件中添加 CMD [" /dockerRepo/echo.sh"]
答案 1 :(得分:0)
您是否尝试过直接在Dockerfile本身中运行以下内容?
RUN echo -e "Your message"
答案 2 :(得分:0)
您在CMD中所做的任何操作都只会在日志中可见,并且仅对每个服务可见,因此您最好也只看我想避免的日志。如果希望它从本地命令行运行,则需要包装docker-compose up
命令。
以下内容未经过全面测试。 。我自己使用getContainerHealth和waitContainer脚本,因此 可以 对其进行担保。我相当确定我是在此网站上找到的,但不记得在哪里。
假设您正在等待服务处于可用状态,则可以使用类似于以下撰写文件的内容:
docker-compose.yml
services:
serviceOne:
// ... the usual stuff
container_name: serviceOne
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 10s
timeout: 10s
retries: 3
start_period: 1s
serviceTwo:
// ... the usual stuff
container_name: serviceTwo
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 10s
start_period: 1s
测试中的命令是用于定义服务已启动并正在运行的命令。此处更多信息:https://docs.docker.com/compose/compose-file/#healthcheck
您可能需要针对生产和开发进行不同的运行状况检查(或至少间隔,超时,start_periods等)。
然后使用一些bash脚本代替docker-compose:
getContainerHealth () {
docker inspect --format "{{json .State.Health.Status }}" $1
}
waitContainer () {
while STATUS=$(getContainerHealth $1); [ $STATUS != "\"healthy\"" ]; do
if [ $STATUS = "\"unhealthy\"" ]; then
echo "Failed!"
exit -1
fi
printf .
lf=$'\n'
sleep 1
done
printf "$lf"
}
waitContainers () {
waitContainer serviceOne
waitContainer serviceTwo
// ... for all services
}
docker-compose up
echo "In progress. Please wait"
waitContainers
echo "Done. Ready to roll."