Поскольку вы назвали свой сервис db
в docker-compose.yaml
, вы можете использовать его как host
, если вы находитесь в той же сети:
db.bind(provider='mysql', user=username, password=password, host='db', database=database)
Чтобы убедиться, что вы находитесь в этой сети, в вашем docker-compose.yaml
внизу вам понадобится:
networks:
default:
external:
name: <your-network>
И вам нужно будет создать эту сеть перед запуском docker-compose up
docker network create <your-network>
Это позволяет избежать необходимости в переменной среды, поскольку имя контейнера будет добавлено в таблицу маршрутизации сети.
Вам не нужно требовать для определения собственной сети, поскольку docker-compose
будет обрабатывать это для вас, но если вы предпочитаете быть немного более явным, это позволяет вам сделать это гибче. Обычно вы резервируете это для нескольких составных решений, которые вы хотите объединить в одной сети, что здесь не так.
Он обрабатывается в docker-compose
так же, как вы делаете это в ванили docker
:
docker run -d -p 3308:3306 --network <your-network> --name db mariadb
docker run -it --network <your-network> ubuntu bash
# in the shell of the ubuntu container
apt-get update && apt-get install iputils-ping -y
ping -c 5 db
# here you will see the results of ping reaching container db
5 packets transmitted, 5 received, 0% packet loss, time 4093ms
Редактировать
Как примечание, согласно комментарию @ DavidMaze, порт, с которым вы будете связываться, это 3306, поскольку это порт, который прослушивает контейнер, а не 3308.