当前位置: > > > > 从容器内连接到 mongoDB 会话
来源:stackoverflow
2024-04-24 15:45:34
0浏览
收藏
知识点掌握了,还需要不断练习才能熟练运用。下面给大家带来一个Golang开发实战,手把手教大家学习《从容器内连接到 mongoDB 会话》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
问题内容
我刚开始学习如何使用 golang 构建微服务。我在本地启动并运行了整个项目,但是当我尝试部署它时遇到了问题。我正在使用 (mgo.dial("localhost"))
的会话不再工作。当我将其放入 docker 镜像时,它无法连接到本地主机,这是有道理的,因为 docker 镜像是在新操作系统(在我的例子中是 alpine)上构建的。我想知道我应该做什么才能让它连接起来。
需要明确的是,当我研究这个问题时,大多数人想要连接到作为 docker 容器的 mongodb 会话,我想从 docker 容器内连接到 mongodb 会话。此外,一旦我准备好部署,我将使用 statefulset 和 kubernetes(如果这会改变任何情况)。
例如,我希望我的程序是这样的:
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
正如您所料,它显示未连接。此外,端口映射适用于项目的其余部分,而不是这部分。
感谢您的帮助!
解决方案
我认为您不应该尝试连接到您计算机上运行的 mongodb 服务器。考虑稍后部署整个应用程序,您希望 mongodb 服务器与您的服务一起在某个云或服务器上运行。
这个问题可以通过设置一个额外的容器并将其链接到您的 go web 应用程序来解决。 docker compose 可以处理这个问题。只需将 docker-compose.yml 文件放在您正在执行 docker build
的目录中即可。
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
访问。
今天关于《从容器内连接到 mongoDB 会话》的内容介绍就到此结束,如果有什么疑问或者建议,可以在公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!