停靠-编写.yaml
version: '3.9'
services:
web:
env_file: .env
build: .
command: sh -c "alembic upgrade head && uvicorn main:app --host 0.0.0.0 --port 8000"
volumes:
- .:/app
ports:
- 8000:8000
depends_on:
- db
- redis
db:
image: postgres:11
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
- POSTGRES_DB=${DB_NAME}
redis:
image: redis:6-alpine
volumes:
postgres_data:
.环境
DB_USER='wplay'
DB_PASS='wplay'
DB_HOST=db
DB_NAME='wplay'
DB_PORT=5432
我经营码头集装箱的时候
web_1 | could not connect to server: Cannot assign requested address
web_1 | Is the server running on host "localhost" (::1) and accepting
web_1 | TCP/IP connections on port 5432?
我尝试更改.env DB_HOST='localhost'
并添加
ports:
- '5432:5432'
到yaml db
配置,但什么都没有
1条答案
按热度按时间n6lpvg4x1#
您正在启动两个单独的容器-一个“web”和一个“db”,但尝试通过
localhost
连接到另一个容器。localhost
只能在其自己的容器中解析到。带Docker运行
在
docker run
命令中使用--network="host"
,那么docker容器中的localhost
和127.0.0.1
将指向您的docker主机。使用Docker合成
每个容器都可以查找主机名web或db,并返回相应容器的IP地址,例如,
web
的应用程序代码可以连接到URLpostgres://db:5432
并开始使用Postgres数据库。在
web
容器中,到db的连接字符串类似于postgres://db:5432
参见docker documentation或docker compose documentation