我有一個使用golang構建的web服務器。當我在本地測試它時,它工作正常。無法連接到來自Golang容器的Postgres docker容器
但是,當我爲我的Web服務器構建Docker鏡像時,它無法連接到正在運行的Postgres容器。
這裏是我的docker-compose.yml
:
version: '2'
services:
go:
image: golang:1.7
volumes:
- ./:/server/http
ports:
- "80:8080"
links:
- postgres
- mongodb
- redis
environment:
DEBUG: 'true'
PORT: '8080'
postgres:
image: onjin/alpine-postgres:9.5
restart: unless-stopped
ports:
- "5432:5432"
environment:
LC_ALL: C.UTF-8
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
mongodb:
image: mvertes/alpine-mongo:3.2.3
restart: unless-stopped
ports:
- "27017:27017"
redis:
image: sickp/alpine-redis:3.2.2
restart: unless-stopped
ports:
- "6379:6379"
我Dockerfile
:
FROM golang:1.7
RUN mkdir -p /home/app
WORKDIR /home/app
COPY . /home/app
RUN make deps && make
ENTRYPOINT ["./bin/api-test"]
EXPOSE 8080
我使用的Postgres的連接字符串:
postgresql://user:[email protected]/mydb?sslmode=disable
對於主機,我嘗試localhost
並返回出現以下錯誤:
dial tcp [::1]:5432: getsockopt: connection refused
嘗試postgres
,它返回下列信息:
dial tcp 202.71.99.194:5432: getsockopt: connection refused
試過IP地址,我得到運行此命令將返回172.19.0.3
:
docker inspect apitest_postgres_1 | grep IPAddress
其中apitest_postgres_1
是Postgres的容器名稱。它也返回了這個錯誤:
dial tcp 172.19.0.3:5432: getsockopt: connection timed out
你能告訴我我在這裏失蹤了嗎?我對碼頭工人沒有經驗,而且這花了很長時間調查解決方案。
編輯: 我運行使用此命令我golang泊塢窗:
docker run --env-file ./example.env --rm -it -p 8080:8080 api-test
example.env
是該文件包含我的環境瓦爾。
編輯2: 我改變了連接字符串如下:
postgresql://user:[email protected]:5432?sslmode=disable
它返回以下錯誤:
dial tcp: lookup postgres on 192.168.65.1:53: no such host
我得到的想法,我的Mac是問題在這裏。我的默認DNS是8.8.8.8
,這不應該是一個問題。
你有沒有嘗試在url中設置'postgres'作爲主機'postgresql:// user:secret @ postgres/mydb?sslmode = disable'?與服務名稱相同。 –
@Зелёныйyup試過了,它返回了以下錯誤:'撥號tcp 202.71.99.194:5432:getsockopt:連接被拒絕' –
您確定您允許Postgres'pg_hba.conf'中的TCP/IP網絡上的所有連接嗎? –