este es mi archivo docker-compose:
version: '3.0' services: app-web: restart: always build: ./web environment: PG_HOST: $(APP_DB_IP) PG_PORT: 5432 ports: - "8081:8080" links: - app-db app-db: build: ./db expose: - "5432" volumes: - /var/lib/postgresql/data
Quiero pasar a app-web la ip de app-db (Postgresql en este caso) como ENV var para que pueda conectarse a la base de datos sin problemas... ¿alguna idea de cómo lograrlo?
En realidad, no necesita hacer nada de esto, ya que ya está utilizando la función de links
en Docker Compose. Simplemente deshágase de la variable PG_HOST
y use el nombre de host app-db
:
services: app-web: restart: always build: ./web environment: PG_PORT: 5432 ports: - "8081:8080" links: - app-db
Dado que incluyó la entrada app-db
en links
, simplemente puede usar app-db
como nombre de host en su contenedor app-web
. Docker configurará una asignación de nombre de host en el contenedor app-web
la app-db
que resuelve el nombre de host de la base de datos de la aplicación en la dirección IP del contenedor de la base de datos.
Puede verificarlo ejecutando lo siguiente, que intentará hacer ping al contenedor app-db
desde el contenedor app-web
:
docker-compose exec app-web bash -c "ping app-db"
Esto debería mostrar el resultado del comando ping que muestra la dirección IP resuelta del contenedor app-db
, por ejemplo, así:
PING app-db (172.19.0.2): 56 data bytes 64 bytes from 172.19.0.2: icmp_seq=0 ttl=64 time=0.055 ms 64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.080 ms 64 bytes from 172.19.0.2: icmp_seq=2 ttl=64 time=0.098 ms
Presione ctrl+c
para detener el comando ping.
Como se muestra en la otra respuesta, si aún desea pasar el nombre de host (lo que probablemente sea una buena idea, en caso de que alguna vez quiera apuntar a una base de datos diferente), puede usar app-db
como un valor:
services: app-web: restart: always build: ./web environment: PG_HOST: app-db PG_PORT: 5432 ports: - "8081:8080" links: - app-db
Puede usar app-db como nombre en lugar de ip, la ventana acoplable determinará automáticamente cuál es la ip correcta. Como se indica en los documentos de Docker: un contenedor siempre puede descubrir otros contenedores en la misma pila usando solo el nombre del contenedor como nombre de host.
Así que en tu ejemplo puedes usar:
environment: PG_HOST: app-db