postgresql 如何解决Docker DNS问题?

jucafojl  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(109)
version: '3.8'

services:
  postgres:
    image: postgres:14-alpine
    ports:
      - '5432:5432'
    volumes:
      - ~/apps/postgres:/var/lib/postgresql/data
    env_file:
      - .env

  main:
    container_name: tm_main
    build:
      context: .
    env_file:
      - .env
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - '3000:3000'
    command: npm run start:dev
    depends_on:
      - postgres
    restart: always

volumes:
  pgdata:

我有一些docker-compose.yml文件,当我运行docker时,我得到一个错误getaddrinfo ENOTFOUND postgres。这里是.env文件

PORT=3000

DATABASE_HOST=postgres
DATABASE_USER=user
DATABASE_PASSWORD=root
DATABASE_NAME=docker_problem_db
DATABASE_PORT=5432
JWT_REFRESH_SECRET="refreshVeryHardSecret"
JWT_REFRESH_EXPIRE=86000

我使用数据库管理器Beekeeper Studio,当我尝试连接数据库与主机postgres得到同样的错误,但当改变主机名为'localhost'一切都是wokring。
我想通过主机名连接到数据库,我读了很多关于dns的问题,但我不能解决它,请帮助我。
当我尝试这个:

docker run --name acid -d -e POSTGRES_PASSWORD=postgres postgres:13

我无法使用凭据通过数据库管理器连接到数据库:

hostname=acid
user=postgres
password=postgres

但我可以这样连接:

docker exec -it acid psql -U postgres

docker inspect显示:

"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "0166c61f6a5aea83490fc8c598af04e55df71f9009e336684542f922b4c042cd",
                    "EndpointID": "8c11cc65305666dee3786ad23453b981230adc2bd654aee4b8312fe5f54c074b",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }

这里是网络列表

NETWORK ID     NAME                   DRIVER    SCOPE
0166c61f6a5a   bridge                 bridge    local
491c2f61e8d2   host                   host      local
33ac66fb767c   mynetwork              bridge    local
8233fba80fe2   nest-backend_default   bridge    local
6cc450ff3353   none                   null      local
km0tfn4u

km0tfn4u1#

你还没有定义主机名在您的组成。
您可以根据您包含的图像在container_name下面的services.postgres中添加hostname: postgres
编码愉快!

相关问题