Порт доступа одного контейнера из другого контейнера

У меня есть база данных postgres в одном контейнере и приложение Java в другом контейнере. База данных Postgres доступна через порт 1310 в localhost, но java-контейнер не может получить к ней доступ. Я попробовал эту команду:

docker run modelpolisher_java java -jar ModelPolisher-noDB-1.7.jar --host=biggdb --port=5432 --user=postgres --passwd=postgres --dbname=bigg

Но это дает ошибку java.net.UnknownHostException: biggdb,

Вот мой docker-compose.yml файл:

version: '3'
services:
  biggdb:
    container_name: modelpolisher_biggdb
    build: ./docker/bigg_docker
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=bigg
    ports:
      - "1310:5432"
  java:
    container_name: modelpolisher_java
    build: ./docker/java_docker
    stdin_open: true
    tty: true

Dockerfile для biggdb:

FROM postgres:11.4

RUN apt update &&\
apt install wget -y &&\
# Create directory '/bigg_database_dump/' and download bigg_database dump as 'database.dump'
wget -P /bigg_database_dump/ https://modelpolisher.s3.ap-south-1.amazonaws.com/bigg_database.dump &&\
rm -rf /var/lib/apt/lists/*

COPY ./scripts/restore_biggdb.sh /docker-entrypoint-initdb.d/restore_biggdb.sh

EXPOSE 1310:5432

Может кто-нибудь сказать, какие изменения мне нужно сделать в docker-compose.yml или в команде, чтобы сделать порты доступа к java-контейнеру контейнера biggdb (postgres)?

2 ответа

Два контейнера должны находиться в одной внутренней Docker-сети, чтобы иметь возможность общаться друг с другом. Docker Compose автоматически создает сеть для вас и присоединяет контейнеры к этой сети. Если вы docker run контейнер вместе с этим, вам нужно найти имя этой сети.

Бегать

docker network ls

Это перечислит внутренние сети Docker, которые у вас есть. Один из них будет назван как-то bigg_default где первая часть (вероятно) ваше текущее имя каталога. Затем, когда вы действительно запустите контейнер, вы можете подключиться к этой сети с помощью

docker run --net bigg_default ...

Рассмотрите возможность установки command: в вашей docker-compose.yml файл для передачи этих аргументов, когда вы docker-compose up, Если --host option - это ваш код, и он не исходит из фреймворка. Передача таких настроек через переменные среды может быть немного проще в управлении, чем аргументы командной строки.

Как вы используете docker-compose чтобы вызвать два контейнера, они уже используют общую сеть. Чтобы иметь доступ к тому, что вы должны использовать docker-compose run и нет docker run, Также передайте название сервиса (java), а не имя контейнера (modelpolisher_java) в docker-compose run команда.

Так что просто используйте следующую команду для запуска вашего jar:

docker-compose run java java -jar ModelPolisher-noDB-1.7.jar --host=biggdb --port=5432 --user=postgres --passwd=postgres --dbname=bigg
Другие вопросы по тегам