Вашият 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:example@sqldat.com:5432/mydatabase
до
DATABASE_URL: postgres://username:example@sqldat.com:5432/mydatabase
Това работи благодарение на връзките на Docker:web контейнерът има файл (/etc/hosts ) с db запис, сочещ към IP, че db контейнерът е включен. Това е първото място, където системата (в този случай контейнерът) ще гледа, когато се опитва да разреши имена на хостове.