Из-за network_mode: host
ваш контейнер приложений находится в частной сети docker, например, 192.168.65.1/24, в то время как ваш контейнер БД находится в другой частной сети, созданной docker, например 172.20.0.2/. 16. Эта сеть будет удалена, если вы запустите docker -compose down:
Removing network XXXX_default
, где XXXX - имя вашего каталога.
Если вы удалили network_mode: host
из приложения-службы оба контейнера будут находиться в одной частной сети и доступны по имени службы.
$ docker inspect XXXX_default
"Containers": {
...
"Name": "app",
"IPv4Address": "172.21.0.3/16",
...
},
...
"Name": "db",
"IPv4Address": "172.21.0.2/16",
...
}
},
Контейнер приложения может получить доступ к БД через порт 3306. Нет необходимости указывать порт как 1200. Согласно документации:
Контейнеры, подключенные к одной и той же определяемой пользователем мостовой сети, автоматически открывают все порты друг для друга, а порты - для внешнего мира. Это позволяет контейнерам приложений легко общаться друг с другом, не открывая случайно доступ к внешнему миру.