Postgresql 无法从另一个容器中的web应用访问docker中的postgres
我有一个samle应用程序,我正在使用docker compose在我的机器上本地运行。web应用程序在一个容器中,db(postgres)在另一个容器中 我有一个无法解决的连接问题 docker composePostgresql 无法从另一个容器中的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
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中执行此操作:
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