【问题标题】:Docker compose mysql container runs after application that depends on it [duplicate]Docker compose mysql容器在依赖它的应用程序之后运行[重复]
【发布时间】:2018-09-26 09:33:43
【问题描述】:

我有一个依赖于 MySQL 的简单 java 应用程序。

这就是我的docker-compose.yaml 的样子:

version: "3.3"
services:
  docker-mysql:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_PASSWORD=root
    volumes:
      - /var/lib/mysql
    ports:
      - 3306:3306
  my-app:
    build: .
    depends_on:
      - docker-mysql
    ports:
      - 8080:8080

这是我创建容器化应用程序的Dockerfile,即my-app

FROM openjdk:8
EXPOSE 8080
ADD /target/Service1-0.0.1.jar Service1.jar
ENTRYPOINT ["java","-jar","Service1.jar"]

当我尝试docker-compose up时,应用程序成功启动了Tomcat,但无法连接到MySQL容器,因为它在应用程序之后启动:

Docker 撰写日志

【问题讨论】:

    标签: java mysql docker docker-compose


    【解决方案1】:

    通常,它应该在 db 容器之后出现。 docker logs docker-mysql_1 --tail 25 -f 粘贴的结果是什么。

    另外,尝试像这样为您的数据库容器添加一个卷部分

    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_PASSWORD=root
    volumes:
      - /var/lib/mysql
    

    【讨论】:

    • 感谢您提及volumes,请参阅更新后的问题。
    • 在我的机器上使用相同的配置一切正常devert@maviance:~/Projects/smobilpay-uats$ docker-compose up -d Creating network "smobilpay-uats_default" with the default driver Creating smobilpay-uats_docker-mysql_1 ... done Creating smobilpay-uats_my-app_1 ... done 不知道你做错了什么
    • 我只说docker-compose up 不休息... -d Creating network ...
    • 我不太清楚你的意思。但是docker-compose up -d 是从图像中调出容器。 d 标志是以分离模式启动它们。这意味着您可以关闭终端并且容器不会关闭。
    【解决方案2】:

    它在文档https://docs.docker.com/compose/startup-order/ 中非常清楚地说明了这一点 depends_on 只会按该顺序启动 docker 构建,它不会等待构建完成。您需要提供自己的command,这将确保在继续下一个构建之前启动所需的服务。或者,您可以跳过 docker compose,直接使用 bash 脚本,按照您想要的顺序执行 docker run

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2021-12-04
      • 2018-05-26
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多