docker compose mysql容器在依赖它的应用程序之后运行

20jt8wwn  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(416)

这个问题在这里已经有答案了

如何知道docker mysql容器何时启动,mysql何时准备好接受查询(14个答案)
两年前关门了。
我有一个简单的java应用程序,它依赖于mysql。
这就是我的 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撰写日志

wnvonmuf

wnvonmuf1#

医生说得很清楚https://docs.docker.com/compose/startup-order/ depends_on 只会按该顺序启动docker构建,而不会等待构建完成。你需要给你自己的 command 这将确保在继续下一个生成之前启动所需的服务。或者您可以跳过docker compose,只需使用bash脚本即可执行 docker run 按你想要的顺序。

2izufjch

2izufjch2#

通常,它应该出现在db容器之后。结果如何 docker logs docker-mysql_1 --tail 25 -f 把它也贴上。
另外,尝试像这样为db容器添加volumes部分

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

相关问题