Как в docker-compose использовать localhost
Предположим, в docker-compose.yml
у вас лежит вот такая штука:
version: '3.7'
services:
mysql:
image: mysql
container_name: mysql-blog
ports:
- '1095:3306'
expose:
- 1095
command: --character-set-server=utf8
--collation-server=utf8_general_ci
--default-authentication-plugin=mysql_native_password
--sql-mode=NO_AUTO_VALUE_ON_ZERO
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'passsword'
MYSQL_DATABASE: dbname
some-node-app:
image: chupurnov/some-node-app
ports:
- '8012:8012'
Два контейнера, один для базы данных, второй на ноде. Из ноды нужно обращаться в эту базу. Но какой у нее хост?
Кажется очевидным localhost
. Но это не так. В интернете пишут про такое решение: запускаем композ, а затем в командной строке выполняем
docker inspect mysql-blog | grep Gateway
По идее, оно покажет ip, по которому можно обращаться к мускулу. Но вот досада, этот ip может измениться.
Как быть?
В интернете вы найдете упоминание host.docker.internal
, но такой хост докер не видит.
Оказывается в новой версии docker-compose@3.7
появилась такая штука:
some-node-app:
image: chupurnov/some-node-app
ports:
- '8012:8012'
extra_hosts:
- 'host.docker.internal:host-gateway'
И теперь к внутреннему локалхосту можно обращаться как к host.docker.internal
.