【问题标题】:Connect to a mongoDB session from within container从容器内连接到 mongoDB 会话
【发布时间】: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 是否在容器中运行?

标签: mongodb docker go


【解决方案1】:

我认为您不应该尝试连接到您机器上运行的 MongoDB 服务器。考虑稍后部署整个应用程序,您希望 MongoDB 服务器与您的服务一起在某个云或服务器上运行。

可以通过设置一个额外的容器并将其链接到您的 Go Web 应用程序来解决该问题。 Docker compose 可以处理这个问题。只需在您正在执行docker build 的目录中放置一个 docker-compose.yml 文件即可。

version: '3'
  services:
    myapp:
      build: .
      image: hell:4
      ports:
        - 8080:8080
      links:
        - mongodb
      depends_on:
        - mongodb
  mongodb:
    image: mongo:latest
    ports:
        - "27017:27017"
    environment:
        - MONGODB_USER="user" 
        - MONGODB_PASS="pass"

这样的事情应该可以做到(未经测试)。您有两项服务:一项用于根据您当前所在目录中的Dockerfile 构建的应用程序。此外,它还链接到下面定义的名为mongodb 的服务。可以通过服务名mongodb访问mongodb服务。

【讨论】:

    【解决方案2】:

    如果您的 mongoDB 服务器在您的主机中运行,请将 localhost 替换为您的主机 IP。

    【讨论】:

    • 我刚刚尝试过,但没有成功。我基本上从 cmd 制作了一个标志并传入了我的 ip 地址,并且代码将它链接到了 mgo.Dial(etc.)。看起来像这样docker run -d -p 8080:8080 7b0bbcf671d1 --mongo-url=11.111.11.111 我的代码接受了它是这样的:flags.StringVar(&ipAdd,"mongo-url","localhost","url for mongoDB") mgo.Dial(ipAdd)
    • 我也试过 docker run -d -p 8080:8080 hell:4 --mongo-url=mongo:11.111.11.111/go/src/db
    猜你喜欢
    • 2022-01-11
    • 2017-10-03
    • 2018-01-09
    • 2019-02-24
    • 2021-11-26
    • 1970-01-01
    • 2017-09-13
    • 2016-01-29
    • 2019-01-27
    相关资源
    最近更新 更多