Связь хоста с Docker-контейнером и Docker-контейнером - PullRequest
0 голосов
/ 09 июля 2019

Я создаю 2 docker-контейнера "app" и "db" через файл docker-compose.

Сервер приложений просто устанавливает java / tomcat через Dockerfile, который docker-compose использует для сборки.

Сервер БД использует образ MS SQL.

Когда яrun: docker-compose up

Я следую, что в процессе сборки программного обеспечения мне нужно загрузить, который развертывает war в каталог tomcat на сервере приложений и создает базу данных на сервере базы данных.

Моя проблема: Процесс сборки может ссылаться на localhost: 8080 для установки / исправления программного обеспечения на сервер приложений и на localhost: 1433 для установки / исправления части базы данных программного обеспечения на сервере базы данных.Однако, когда я запускаю Tomcat, система не подключается к сети, потому что сервер приложений не может подключиться к серверу базы данных через «localhost: 1433», поэтому он требует, чтобы я скачал и обновил файл свойств после сборки до внутренней док-станцииIP-адрес и ТОГДА он работает.

У меня такой вопрос: как я могу заставить свой локальный хост и контейнер моего приложения ссылаться на БД таким же образом в URL базы данных?

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-Compose:

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:

1 Ответ

1 голос
/ 09 июля 2019

Подключите ваш сервис к той же сети и выберите сервис по имени сервиса. Для этого вам нужно определить сеть Docker, как показано ниже. В следующем примере я могу получить доступ к БД с помощью http://mongo:27017.

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:
...