如何在Docker中连接两个容器并更改springbootapp / mysqldb的参数

时间:2019-07-11 12:05:25

标签: docker docker-compose

以下情况:

我有两个容器,一个带有一个带有一些表和内容的MySQL DB,另一个是带有springboot的容器,该容器启动了一个.war应用程序,该容器需要上述db并需要通向飞行通道。两者都使用docker-compose文件和单独的Dockerfile构建。
我怎样才能同时连接我的Springboot应用程序可以访问数据库?现在,我得到了错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

因为它仍然指向本地主机(应用程序容器),其中ofc不是mysql数据库。

spring.datasource.url: jdbc:mysql://#${db.hostname:localhost}:${db.port:3306}/${db.dbname:appdb}?useSSL=false&useUnicode=yes&characterEncoding=UTF-8

当我将db.hostname更改为网络的IP地址时,仍然出现错误。而且我不知道如何直接与容器“对话”。有什么想法怎么办?如果可能,它应该在Dockerfile,docker-compose文件或脚本中发生(大多数情况下是自动的,没有单独的“ docker run xxx-”命令)。该项目将查看该应用程序是否能够在docker环境中运行。

当我检查docker0(我猜是默认网桥?)端口3306是否打开(使用nmap)时,它已经打开。

docker-compose.yml

version: "3"
services:
  mysqldb:
    container_name: mysqldb
    networks:
      - app-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=app
    build: ./mysql
    volumes:
      - datavolume:/var/lib/mysql
    ports:
      - "3306:3306"


  app-sb:
    container_name: app
    build: ./app
    networks:  
      - app-mysql
    depends_on:  
      - mysqldb
    links:
      - mysqldb
volumes:
  datavolume:
networks: 
  app-mysql:
    driver: bridge

用于mysqldb的Dockerfile:

FROM mysql:5.7
COPY target/app-bck.sql /
ADD init_db.sh /tmp/init_db.sh
RUN /tmp/init_db.sh

springboot应用程序的Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/app.war /
COPY target/app.yaml /
RUN mkdir /etc/app
RUN mv app.yaml /etc/app/

RUN java -jar /app.war

/etc/app/app.yaml

baseUrl: https://app.web.site
db.hostname: mysqldb
db.port: 3306
db.name: app
db.username: app
db.password: somepw
mail.host: localhost
mail.sender: no-reply@web.site

0 个答案:

没有答案