主机到Docker容器到Docker容器的通信

主机到Docker容器到Docker容器的通信,docker,docker-compose,containers,dockerfile,Docker,Docker Compose,Containers,Dockerfile,我正在通过docker compose文件构建两个docker容器“app”和“db” 应用服务器只是通过docker compose用来构建的docker文件安装java/tomcat db服务器使用MS SQL映像 当我跑步时: 码头工人整理 接下来,我将加载一个软件构建过程,该过程将war部署到应用服务器中的tomcat目录,并在数据库服务器中构建数据库 我的问题是:构建过程可以引用localhost:8080将软件安装/修补到应用服务器,并引用localhost:1433将软件的数据库部

我正在通过docker compose文件构建两个docker容器“app”和“db”

应用服务器只是通过docker compose用来构建的docker文件安装java/tomcat

db服务器使用MS SQL映像

当我跑步时: 码头工人整理

接下来,我将加载一个软件构建过程,该过程将war部署到应用服务器中的tomcat目录,并在数据库服务器中构建数据库

我的问题是:构建过程可以引用localhost:8080将软件安装/修补到应用服务器,并引用localhost:1433将软件的数据库部分安装/修补到数据库服务器。但是,当我启动Tomcat时,系统不会联机,因为应用程序服务器无法通过“localhost:1433”连接到数据库服务器,因此需要我在构建后跳入并将属性文件更新为docker内部IP地址,然后才能工作

我的问题是:如何让我的localhost和我的app容器在数据库url中以相同的方式引用DB

应用服务器的Dockerfile:

FROM centos:centos7

COPY apache-tomcat-9.0.20.tar.gz /tmp/

WORKDIR /tmp/
RUN yum -y update
RUN yum -y install java-11-openjdk-devel
RUN tar -xf apache-tomcat-9.0.20.tar.gz
RUN mv apache-tomcat-9.0.20 /opt/tomcat/
RUN export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/
RUN export PATH=$PATH:$JAVA_HOME/jre/bin
RUN export CATALINA_HOME=/opt/tomcat/
RUN export PATH=$PATH:$CATALINA_HOME/bin
WORKDIR /opt/tomcat/webapps
RUN mkdir testapp
    enter code here
    enter code here
Docker编写文件:

version: '3.3'
services:
  db:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    restart: always
    volumes:
      - db_data:/var/lib/mssql
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=Test123
    network_mode: bridge
    hostname: db
    ports:
      - "1433:1433"
  app:
    build: './testapp'
    volumes:
      - './system/build:/opt/tomcat/webapps/testapp/'
    ports:
      - "8080:8080"
      - "8009:8009"
    network_mode: bridge
    tty: true
    depends_on:
      - db
volumes:
  db_data:

将您的服务带到同一网络,并按服务名称以服务为目标。为此,您需要定义一个docker网络,如下所示。对于以下示例,我可以使用访问DB


我想您需要提供最小的
docker compose.yaml
&
Dockerfile
。您的意思是在构建阶段连接到数据库?如果是,如何进行?你能展示你完整的
Dockerfile
s和
dockercompose
文件吗?抱歉!添加了那些文件。是的,在构建阶段,我正在对DB运行创建和更新脚本,该脚本仅从我的主机连接到数据库URL中的localhost:1433,以连接,效果良好。与您当前的问题无关,但。。。。您是否知道,所有
RUN export whatever=X
都是无用的,因为您的Dockerfile中没有在它们之后运行任何命令?它们将无法在构建阶段生存,并且在从生成的映像运行的容器中不可用。有关更多详细信息,请参阅
mongo:
 image: mongo:latest
 ports:
   - "27017:27017"
 volumes:
  - ./data/db:/data/db
 networks:
  - my-net

spring:
 depends_on:
   - mongo
 image: docker-spring-http-alpine
 ports:
   - "8080:8080"
 networks:
   - my-net

networks:
  my-net: