Проблемы с резолвом сети 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 файлу.