从容器内连接到mongoDB会话
我刚学会如何使用goLang构建微服务。我有一个完整的项目,并在本地运行,但当我试图部署它时,我遇到了一个问题。我使用的会话从容器内连接到mongoDB会话,mongodb,docker,go,Mongodb,Docker,Go,我刚学会如何使用goLang构建微服务。我有一个完整的项目,并在本地运行,但当我试图部署它时,我遇到了一个问题。我使用的会话(mgo.Dial(“localhost”)不再工作。当我把它放到docker映像中时,它无法连接到本地主机,这是有道理的,因为docker映像在一个新的操作系统上构建它(在我的例子中是alpine)。我在想我应该怎么做才能让它连接起来 明确地说,当我研究这个问题时,大多数人都希望连接到mongoDB会话(docker容器),我希望从docker容器中连接到mongoDB会
(mgo.Dial(“localhost”)
不再工作。当我把它放到docker映像中时,它无法连接到本地主机,这是有道理的,因为docker映像在一个新的操作系统上构建它(在我的例子中是alpine)。我在想我应该怎么做才能让它连接起来
明确地说,当我研究这个问题时,大多数人都希望连接到mongoDB会话(docker容器),我希望从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服务器正在主机上运行,请用主机IP替换本地主机。我认为您不应该尝试连接到您的主机上运行的mongoDB服务器。如果希望MongoDB服务器与您的服务一起在某个云或服务器上运行,请考虑以后部署整个应用程序 这个问题可以通过设置一个额外的容器并将其链接到您的Go Web应用程序来解决。Docker compose可以处理这个问题。只需将docker-compose.yml文件放在执行
docker构建的目录中即可
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
尝试docker run--net=“host”-d-p 8080:8080 hell:4
访问。我得到:警告:使用主机网络模式时,会丢弃已发布的端口,以及一个长哈希代码。您的mongodb是否在容器中运行?我只是尝试了一下,但没有效果。我基本上从cmd中创建了一个标志,并传入了我的ip地址,代码将其链接到mgo.Dial(等等)。它看起来像是docker run-d-p8080:8080 7b0bbcf671d1——mongo url=11.111.11.111
我的代码接受了它:flags.StringVar(&ipAdd,“mongo url”,“localhost”,“mongoDB的url”)mgo.Dial(ipAdd)
我还尝试了docker run-d-p8080:8080地狱:4——mongo url=mongo:11.111.11/go/src/db