无法连接到Docker容器内的postgre数据库

50few1ms  于 2023-01-04  发布在  Docker
关注(0)|答案(1)|浏览(252)

停靠-编写.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配置,但什么都没有

n6lpvg4x

n6lpvg4x1#

您正在启动两个单独的容器-一个“web”和一个“db”,但尝试通过localhost连接到另一个容器。localhost只能在其自己的容器中解析到。

带Docker运行

docker run命令中使用--network="host",那么docker容器中的localhost127.0.0.1将指向您的docker主机。

使用Docker合成

每个容器都可以查找主机名web或db,并返回相应容器的IP地址,例如,web的应用程序代码可以连接到URL postgres://db:5432并开始使用Postgres数据库。
web容器中,到db的连接字符串类似于postgres://db:5432
参见docker documentationdocker compose documentation

相关问题