Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 无法从另一个容器中的web应用访问docker中的postgres_Postgresql_Docker_Docker Compose - Fatal编程技术网

Postgresql 无法从另一个容器中的web应用访问docker中的postgres

Postgresql 无法从另一个容器中的web应用访问docker中的postgres,postgresql,docker,docker-compose,Postgresql,Docker,Docker Compose,我有一个samle应用程序,我正在使用docker compose在我的机器上本地运行。web应用程序在一个容器中,db(postgres)在另一个容器中 我有一个无法解决的连接问题 docker compose version: '3.8' services: db: image: postgres environment: POSTGRES_PASSWORD: 'password' POSTGRES_DB: 'postgres' P

我有一个samle应用程序,我正在使用docker compose在我的机器上本地运行。web应用程序在一个容器中,db(postgres)在另一个容器中

我有一个无法解决的连接问题

docker compose

version: '3.8'


services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: 'password'
      POSTGRES_DB: 'postgres'
      POSTGRES_USER: 'postgres'
    volumes:
      - ./postgres-db:/var/lib/postgresql/data
    ports:
      - '5432:5432'
  app:
    build:
      context: .
      dockerfile: app/Dockerfile
    restart: always
    environment:
      APP_FRONTEND_PORT: '8080'
      DB_PORT: '5433'
      DB_HOST: 'db'
    ports:
      - '8080:8080'
    depends_on:
      - 'db'

volumes:
    postgres-db:
Dockerfile

FROM golang:latest
WORKDIR /scratch
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build  -o /bin/frontend ./...

FROM alpine:latest

RUN apk --no-cache add ca-certificates
WORKDIR /go/bin/
COPY --from=build /bin/frontend /go/bin/frontend
ENTRYPOINT ["/go/bin/frontend"]
两个容器都在运行,我可以登录到正在运行的postgres容器和正在运行的postgres us

当我尝试运行来自美国的更新时,我得到一个500错误,并且似乎应用程序容器无法与db容器通信。我不确定我错过了什么

尝试调用更新日期时出现客户端错误:

encountered err: failed to begin transaction: failed to connect to `host=db user=postgres database=postgres`: dial error (dial tcp 172.29.0.2:5433: connect: connection refused)
docker ps
yeilds:

$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                       NAMES
19eeed869434   sample_app   "/go/bin/frontend"       48 minutes ago   Up 48 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   sample_app_1
84804f00c751   postgres            "docker-entrypoint.s…"   48 minutes ago   Up 48 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   sample_app_db_1
$ 
如中所述,您需要将这两个服务放入用户定义的网桥网络中,以便它们通过容器名称相互引用。下面是如何在docker compose.yml中执行此操作:

  • 定义自定义网桥网络:
  • 将两个服务都放入该网络:
  • 强制指定特定的容器名称,尤其是另一个引用的容器名称,否则docker compose将在服务名称中添加前缀和后缀作为容器名称,如
    sample\u app\u db\u 1

  • 我在看不同的文档(这似乎更符合compose API(3.8)的版本)我正在使用的。当我使用用户定义的网桥方法进行测试时,我得到了无效选项。`` services.app不支持的配置选项:'network'services.db不支持的配置选项:'network'```@JerryJonesII,修复了示例中的错误语法。对此表示抱歉。虽然网桥似乎正在被定义,但我仍然得到了在应用程序中执行更新方法时,尝试与db通信时出错。当我检查容器上的日志时,几乎相同:TODO-app | 2021/05/27 09:58:01错误:无法开始事务:无法连接到
    host=db user=postgres数据库=postgres
    :拨号错误(拨打tcp 172.31.0.2:5433:连接:连接被拒绝)@JerryJonesII如果我说你的端口号错了怎么办?5432还是5433?
    networks:
      some-name:
        driver: bridge
    
    services:
      db:
        image: postgres
        environment:
          POSTGRES_PASSWORD: 'password'
          POSTGRES_DB: 'postgres'
          POSTGRES_USER: 'postgres'
        volumes:
          - ./postgres-db:/var/lib/postgresql/data
        ports:
          - '5432:5432'
        networks:
          - some-name
      app:
        build:
          context: .
          dockerfile: app/Dockerfile
        restart: always
        environment:
          APP_FRONTEND_PORT: '8080'
          DB_PORT: '5433'
          DB_HOST: 'db'
        ports:
          - '8080:8080'
        depends_on:
          - 'db'
        networks:
          - some-name
    
    services:
      db:
        container_name: db
        image: postgres
        environment:
          POSTGRES_PASSWORD: 'password'
          POSTGRES_DB: 'postgres'
          POSTGRES_USER: 'postgres'
        volumes:
          - ./postgres-db:/var/lib/postgresql/data
        ports:
          - '5432:5432'
        networks:
          - some-name