Вашият DATABASE_URL
се отнася до 127.0.0.1
, който е loopback адаптер (повече тук). Това означава „свържете се със себе си“.
Когато стартирате и двете приложения (без да използвате Docker) на един и същ хост, и двете са адресируеми на един и същ адаптер (известен също като localhost
).
Когато стартирате и двете приложения в контейнери, те не са и двете на localhost както преди. Вместо това трябва да посочите web
контейнер към db
IP адреса на контейнера в docker0
адаптер - който docker-compose
комплекти за вас.
Промяна:
127.0.0.1
до CONTAINER_NAME
(напр. db
)
Пример:
DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
до
DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
Това работи благодарение на връзките на Docker:web
контейнерът има файл (/etc/hosts
) с db
запис, сочещ към IP, че db
контейнерът е включен. Това е първото място, където системата (в този случай контейнерът) ще гледа, когато се опитва да разреши имена на хостове.