Не удается подключиться к mysql, запущенному в контейнере докеров, из другого

Я знаю, что это обычная ситуация, но ничего из того, что я нашел, не помогает.

Я после докер « при получении стартером » руководство дословно, буквально копировать и вставить команды. Но когда я дойду до этого шага:

      docker run -dp 3000:3000 \
   -w /app -v "$(pwd):/app" \
   --network todo-app \
   -e MYSQL_HOST=mysql \
   -e MYSQL_USER=root \
   -e MYSQL_PASSWORD=secret \
   -e MYSQL_DB=todos \
   node:12-alpine \
   sh -c "yarn install && yarn run dev"

Вывод журнала выглядит следующим образом:

      { Error: connect EHOSTUNREACH 172.18.0.2:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
  errno: 'EHOSTUNREACH',
  code: 'EHOSTUNREACH',
  syscall: 'connect',
  address: '172.18.0.2',
  port: 3306 }

Вот загвоздка: я могу успешно подключиться к mysql, запущенному в контейнере, из хост-системы:

      $ mysql -h172.18.0.2 -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

Кроме того, из контейнера «приложение» я могу успешно пропинговать хост «mysql». Однако 'nc' не может подключиться:

      [mmorsi@localhost app]$ docker exec e8df2d36914 ping -c 3 mysql
PING mysql (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.071 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.173 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.176 ms

--- mysql ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.071/0.140/0.176 ms
[mmorsi@localhost app]$ docker exec e8df2d36914 nc -z -v mysql 3306
nc: mysql (172.18.0.2:3306): Host is unreachable

Другие вещи, которые я пробовал:

  • Запуск последнего образа докеры mysql
  • Запуск 'app' на образе centos: последний (с необходимыми шагами для установки deps)

Моя хост-система - Fedora 33. На хосте интерфейс docker0 работает в «доверенной» зоне (цель: ACCEPT):

      [mmorsi@localhost app]$ sudo firewall-cmd --get-active-zones
FedoraWorkstation
  interfaces: enp0s31f6
trusted
  interfaces: docker0
[mmorsi@localhost app]$ man firewall-cmd
[mmorsi@localhost app]$ sudo firewall-cmd --info-zone=trusted
trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: docker0
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

У меня нет идей. Любая помощь или идеи будут очень признательны.

1 ответ

Догадаться!

(Любезно предоставлено https://fedoramagazine.org/docker-and-fedora-32/)

Простой:

      sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-masquerade

Чтобы позволить докеру устанавливать локальные соединения, было все, что нужно! (в дополнение к другим перечисленным там шагам, которые я выполнял ранее).

[Начинает похлопывать себя по спине]

Другие вопросы по тегам