Docker Compose mysql容器在依赖于它的应用程序之后运行

时间:2018-09-26 09:33:43

标签: java mysql docker docker-compose

我有一个依赖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容器,因为它是在该应用程序之后启动的:

enter image description here Docker Compose日志

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

它在文档https://docs.docker.com/compose/startup-order/中非常清楚地说明了这一点 uu = t / (2 * np.pi) # u1# 2 tck, _ = splprep(xy.T, u=uu, s=0, per=True) xi, yi = splev(np.linspace(0, 1, 200), tck) plt.subplots(figsize=(10, 10)) plt.plot(xi, yi)#, '.') plt.axis('equal') 只会按该顺序启动docker构建,不会等待构建完成。您需要提供自己的depends_on,以确保在继续进行下一个构建之前已启动所需的服务。或者,您可以跳过docker compose,而只需使用按您想要的顺序执行command的bash脚本即可。