【发布时间】:2019-01-01 11:29:32
【问题描述】:
我刚开始学习如何使用 goLang 构建微服务。我在本地启动并运行了一个完整的项目,但是当我尝试部署它时遇到了问题。我使用(mgo.Dial("localhost")) 的会话不再有效。当我把它放到一个 docker 镜像中时,它无法连接到本地主机,这是有道理的,因为 docker 镜像是在一个新的操作系统(在我的例子中是 alpine)上构建它的。我想知道我应该怎么做才能让它连接起来。
明确地说,当我研究这个时,大多数人都想连接到一个 docker 容器的 mongoDB 会话,我想从一个 docker 容器内连接到一个 mongoDB 会话。此外,一旦我准备好部署,我将在 kubernetes 中使用 StatefulSet,如果这有任何改变的话。
例如,我希望我的程序是这样的:
sess, err := mgo.Dial("localhost") //or whatever
if err != nil {
fmt.Println("failed to connect")
else {
fmt.Println("connected")
我尝试做的事情: Dockerfile:
FROM alpine:3.6
COPY /build/app /bin/
EXPOSE 8080
ENTRYPOINT ["/bin/app"]
在终端:
docker build -t hell:4 .
docker run -d -p 8080:8080 hell:4
正如您所料,它显示未连接。端口映射也适用于项目的其余部分,而不是这部分。
感谢您的帮助!
【问题讨论】:
-
试试
docker run --net="host" -d -p 8080:8080 hell:4 -
我得到:警告:使用主机网络模式时,已发布的端口被丢弃,以及长哈希码
-
您的 MongoDB 是否在容器中运行?