Проблема, с которой вы сталкиваетесь, связана с тем, что docker-composer запускает службы в том же порядке, который определен в файле yaml.Таким образом, в основном момент, когда вы запускаете службу web db , еще не существует, поэтому ее имя хоста не может быть разрешено.
Если вы измените порядок в docker-compose.yaml:
version: "2"
services:
db:
image: onjin/alpine-postgres
environment:
POSTGRES_PASSWORD: password
web:
build: .
ports:
- "3000:3000"
depends_on:
- "db"
tty: true
и запустите docker-compose up -d вы выигралибольше не вижу ошибки, служба будет работать:
sudo docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
db_1 /docker-entrypoint.sh postgres Up 5432/tcp
web_1 /bin/sh Up 0.0.0.0:3000->3000/tcp
и имя хоста будет правильно разрешено:
sudo docker-compose run web "ping" "db"
PING db (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.096 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.101 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.097 ms
64 bytes from 172.18.0.2: seq=3 ttl=64 time=0.106 ms