Arch Linux下Docker无法映射端口访问宿主PostgreSQL的问题解决
在Arch Linux上Docker容器连接宿主机PostgreSQL 16的端口占用问题解决
问题背景
- 系统环境:Arch Linux + PostgreSQL 16
- 宿主机上的PostgreSQL可被DBeaver及本地应用正常访问
- 执行Docker启动命令时遭遇端口占用错误:
docker run -it -p 3000:3000 -p 5432:5432 joaofilippe/todo_go:0.1
错误信息
docker: Error response from daemon: driver failed programming external connectivity on endpoint wizardly_clarke (9993a1ecda871726d4a21a13fedc31b898d6264e4654324bd452fdb4de04b0ac): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use. ERRO[0000] error waiting for container: context canceled
已尝试的无效操作
- 修改
pg_hba.conf配置以允许Docker访问宿主机PostgreSQL - 通过Docker Compose运行PostgreSQL服务并映射5430端口,仍出现端口占用提示
相关Dockerfile配置
FROM golang as builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download ENV ENV=PROD EXPOSE 5432 COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o ./cmd/server ./cmd/main.go FROM scratch COPY --from=builder /app/cmd/server /app/cmd/server COPY --from=builder /app/config /app/config WORKDIR /app/cmd ENTRYPOINT [ "./server" ]
注:该Dockerfile及对应启动命令在Windows系统下可正常运行
解决方法
使用以下命令启动容器,无需映射5432端口,而是通过--add-host参数让容器直接访问宿主机的PostgreSQL服务:
docker run -it -p 3000:3000 --add-host=host.docker.internal:host-gateway joaofilippe/todo_go:0.1
内容的提问来源于stack exchange,提问作者João Filippe Rossi Rodrigues
相关产品推荐
相关产品推荐

