Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker撰写。网络。Spring启动和MySQL连接_Mysql_Spring_Docker_Docker Compose - Fatal编程技术网

Docker撰写。网络。Spring启动和MySQL连接

Docker撰写。网络。Spring启动和MySQL连接,mysql,spring,docker,docker-compose,Mysql,Spring,Docker,Docker Compose,我尝试将SpringBootWeb应用程序连接到数据库容器。 我可以从web ping db容器。但web无法通过暴露的3307端口连接到db。但我可以通过内部容器端口3306连接到db。项目非常简单。梅怎么了 这是我的docker compose.yml: version: '3' services: db: build: context: ./db dockerfile: Dockerfile image: db ports:

我尝试将SpringBootWeb应用程序连接到数据库容器。 我可以从web ping db容器。但web无法通过暴露的3307端口连接到db。但我可以通过内部容器端口3306连接到db。项目非常简单。梅怎么了

这是我的docker compose.yml

    version: '3'
services:
  db:
    build:
      context: ./db
      dockerfile: Dockerfile
    image: db
    ports:
      - "3307:3306"
    volumes:
      - demo_volume:/var/lib/mysql
    networks:
      - my-backend

  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    image: web
    depends_on:
      - db
    ports:
      - "18080:8080"
    networks:
      - my-backend
    environment:
      - DATABASE_HOST=db
      - DATABASE_USER=user
      - DATABASE_PASSWORD=password
      - DATABASE_NAME=demo
      - DATABASE_PORT=3307
      - SPRING_PROFILES_ACTIVE=container
      - DEBUG=true

volumes:
  demo_volume:
    driver: local

networks:
  my-backend:
    driver: bridge
FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=admin
ENV MYSQL_DATABASE=demo
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=password

ADD dump.sql /docker-entrypoint-initdb.d/
FROM java:8-jre
COPY ./web.jar /app/web.jar
CMD ["java", "-jar", "/app/web.jar"]
CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/web.jar"]
这很简单

Myapplication.yml用于活动配置文件-容器

spring:
  profiles:
    container
  datasource:
    url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?characterEncoding=UTF-8
    username: ${DATABASE_USER}
    password: ${DATABASE_PASSWORD}
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect
也很简单

db Dockerfile

    version: '3'
services:
  db:
    build:
      context: ./db
      dockerfile: Dockerfile
    image: db
    ports:
      - "3307:3306"
    volumes:
      - demo_volume:/var/lib/mysql
    networks:
      - my-backend

  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    image: web
    depends_on:
      - db
    ports:
      - "18080:8080"
    networks:
      - my-backend
    environment:
      - DATABASE_HOST=db
      - DATABASE_USER=user
      - DATABASE_PASSWORD=password
      - DATABASE_NAME=demo
      - DATABASE_PORT=3307
      - SPRING_PROFILES_ACTIVE=container
      - DEBUG=true

volumes:
  demo_volume:
    driver: local

networks:
  my-backend:
    driver: bridge
FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=admin
ENV MYSQL_DATABASE=demo
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=password

ADD dump.sql /docker-entrypoint-initdb.d/
FROM java:8-jre
COPY ./web.jar /app/web.jar
CMD ["java", "-jar", "/app/web.jar"]
CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/web.jar"]
web Dockerfile

    version: '3'
services:
  db:
    build:
      context: ./db
      dockerfile: Dockerfile
    image: db
    ports:
      - "3307:3306"
    volumes:
      - demo_volume:/var/lib/mysql
    networks:
      - my-backend

  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    image: web
    depends_on:
      - db
    ports:
      - "18080:8080"
    networks:
      - my-backend
    environment:
      - DATABASE_HOST=db
      - DATABASE_USER=user
      - DATABASE_PASSWORD=password
      - DATABASE_NAME=demo
      - DATABASE_PORT=3307
      - SPRING_PROFILES_ACTIVE=container
      - DEBUG=true

volumes:
  demo_volume:
    driver: local

networks:
  my-backend:
    driver: bridge
FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=admin
ENV MYSQL_DATABASE=demo
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=password

ADD dump.sql /docker-entrypoint-initdb.d/
FROM java:8-jre
COPY ./web.jar /app/web.jar
CMD ["java", "-jar", "/app/web.jar"]
CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/web.jar"]

您应该链接容器以使其工作

web:
build:
  context: ./web
  dockerfile: Dockerfile
image: web
depends_on:
  - db
ports:
  - "18080:8080"
networks:
  - my-backend
environment:
  - DATABASE_HOST=db
  - DATABASE_USER=user
  - DATABASE_PASSWORD=password
  - DATABASE_NAME=demo
  - DATABASE_PORT=3307
  - SPRING_PROFILES_ACTIVE=container
  - DEBUG=true
links:
  - db

现在,在web容器内/etc/hosts应该有一个关于Docker文档的db Container条目,同一网桥网络(用户定义)中的所有容器通过其内部端口进行通信。这是用图像解释的

如果您希望您的容器可以从外部网络获得,您应该发布此容器的端口。发布-意味着您应该将内部端口映射到外部环境。见图片

dcoker版本
客户端:版本:17.03.1-ce API版本:1.27 Go版本:go1.7.5 Git提交:c6d412e构建:2017年3月28日星期二00:40:02 OS/Arch:darwin/amd64服务器:版本:17.03.1-ce API版本:1.27(最低版本1.12)Go版本:go1.7.5 Git提交:c6d412e构建:2017年3月24日星期五00:00:50 OS/Arch:linux/amd64实验:真
iptables-t nat-L-n的输出是什么?@AlexKarshin iptables:命令未找到对不起,但我不应该这么做。链接是不推荐的语句