Невозможно связать два контейнера Docker в настраиваемой сети моста на Windows - PullRequest
0 голосов
/ 07 мая 2020

Я хочу, чтобы два контейнера Docker могли взаимодействовать друг с другом на машине Windows, на которой запущен Docker Toolbox. Я могу связать контейнеры с помощью опции --link; однако, если я попытаюсь запустить контейнеры в созданной мной настраиваемой сети моста, контейнеры не смогут взаимодействовать друг с другом:

Вот шаги, которые я выполнил:

docker network create web-application-mysql-network

docker run --detach --env MYSQL_ROOT_PASSWORD=somepassword--env MYSQL_USER=some-user --env MYSQL_PASSWORD=pass --env MYSQL_DATABASE=mydb --name mysql --publish 3306:3306 --network=web-application-mysql-network mysql:5.7

docker run -p 8080:8080 -d --network=web-application-mysql-network myrepo/mywebapp:0.0.1-SNAPSHOT

Образ в последней команде выше содержит образ веб-сервера Tomcat Docker в качестве базового образа и «WAR» (файл веб-архива), который будет размещен в Tomcat. Когда я проверяю журналы для контейнера, запущенного последней командой, я вижу следующие ошибки:

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Я могу без проблем связать два контейнера, если вместо этого использовал параметр --link запуска их в моей пользовательской сети моста.

Дополнительная информация: я использую localhost в своем коде веб-приложения для URL-адреса MySQL. Казалось, что это нормально работает при использовании --link

Какие параметры конфигурации / команды мне не хватает, чтобы это работало?

1 Ответ

1 голос
/ 07 мая 2020

Когда вы используете сеть, вы должны использовать имя контейнера, к которому вы хотите подключиться, в URL-адресе. Другими словами, вы должны использовать mysql в mywebapp для доступа к БД.

Я бы посоветовал вам проверить docker -compose, поскольку это позволяет вам избежать ручного создания сети. .

Вот пример:

version: "3"

services:
  mysql:
    image: mysql:5.7
    env_file:
      - db.env
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_USER: ${MYSQL_USER:-user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: "mydb"
    volumes:
      - dbdata:/var/lib/mysql
  mywebapp:
    image: myrepo/mywebapp:${TAG_VERSION:-0.0.1-SNAPSHOT}
    build:
      context: ./mywebapp_location
      dockerfile: Dockerfile
    ports: 
      - "8080:8080"

volumes:
  dbdata:

db.env:

MYSQL_ROOT_PASSWORD=mysql_root_password
MYSQL_USER=the_user
MYSQL_PASSWORD=the_user_password

Для сборки вы можете просто выполнить:

docker-compose build

и для начала просто:

docker-compose up

в остальном вы можете использовать обычные команды docker.

...