Вы можете создать сеть, которая будет совместно использоваться в вашем докере между изображениями
networks:
my_network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.25.0.1/16
gateway: 172.25.0.1
Затем назначить конкретный IP для вашего контейнера БД:
networks:
my_network:
ipv4_address: 172.25.0.3
После этого вам нужно сделатьконечно db
имя хоста связано с IP-адресом контейнера БД. Код ниже добавит новую строку 172.25.0.3 db
к вашему /etc/hosts
файлу.
extra_hosts:
- 'db:172.25.0.3'
Окончательная версия docker-compose будет выглядеть следующим образом:
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- 3000:3000
depends_on:
- db
tty: true
stdin_open: true
extra_hosts:
- 'db:172.25.0.3'
db:
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
networks:
my_network:
ipv4_address: 172.25.0.3
volumes:
db-volume:
networks:
my_network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.25.0.1/16
gateway: 172.25.0.1
Если вы сделаете это, вы можете быть уверены, что хост db
будет всегда доступен. Я надеюсь, что это поможет вам.