完成docker-compose后显示消息成功

时间:2017-03-30 02:39:26

标签: docker docker-compose

我在docker-compse.yml中运行了很多服务。我想显示一条消息,让用户知道docker-compose完成后? 我试图用命令回显消息,但我的容器退出代码0

command: bash -c "echo Congratulation! You can use your containers now"

有没有让用户知道docker-compose完成的时间? 非常感谢!

3 个答案:

答案 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."