Проблемы с резолвом сети docker-compose

Проблема заключается в следующем

Дано:

  • Контейнер с python приложением
  • Контейнер с базой postgresql

Проблема:

База и приложение подняты. Приложение не может зарезолвить хост по имени сервиса, продолжительное время.

docker-compose.base.yml

version: '2.1'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - db
    environment:
      PYTHONUNBUFFERED: 1
  db:
    image: postgres:latest
    restart: always

docker-compose.dev.yml

version: '3.4'

services:
  app:
    command: bash -c 'python wait_for_db.py && adev runserver .'
    build:
      target: dev
    environment:
      SECRET: ${APP_SECRET}
      DB_URI: postgres://${APP_DB_USERNAME}:${APP_DB_PASSWORD}@db:5432/${APP_DB_DATABASE}
    ports:
      - '4444:8000'
    volumes:
      - .:/server
  db:
    environment:
      POSTGRES_USER: ${APP_DB_USERNAME}
      POSTGRES_PASSWORD: ${APP_DB_PASSWORD}
      POSTGRES_DB: ${APP_DB_DATABASE}
    volumes:
      - db:/var/lib/postgresql/data
    ports:
      - "5432:5432"
volumes:
  db:

wait_for_db.py

import asyncio
import os

import asyncpg


def main():
    print('Waiting for database...')
    while True:
        try:
            asyncio.run(asyncpg.connect(os.environ['DB_URI']))
        except Exception as e:
            print('Connecting', e)
            continue
        else:
            print('Database is up!')
            return


if __name__ == '__main__':
    main()

Запускается всё командой

docker-compose -f docker-compose.base.yml -f docker-compose.dev.yml up

Проблемы на устройстве с

docker-compose version
Docker Compose version v2.2.3

docker version
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:54:09 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.8
  Git commit:       20.10.7-0ubuntu5~20.04.2
  Built:            Fri Oct 22 00:45:53 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.5-0ubuntu3~20.04.2
  GitCommit:        
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Dockerfile

FROM python:3 as base
WORKDIR server
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 4444

FROM base as dev
RUN pip install aiohttp-devtools

На устройстве с

docker-compose version
Docker Compose version v2.2.3

docker version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:46:56 2021
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.5.0 (74594)
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:07 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Работает как часы


Ответы (1 шт):

Автор решения: Aleksey Vaganov

Т.к. вы запускаете команду docker-compose с опциями -f я делаю вывод, что она запускается не в папке с проектом.

Используйте дополнительно опцию --env-file для указания пути к .env файлу.

→ Ссылка