我刚开始学习如何使用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
正如您所料,它表示未连接。端口映射也适用于项目的其余部分,而不是此部分。
感谢您的帮助!
答案 0 :(得分:2)
我认为您不应该尝试连接到计算机上运行的MongoDB服务器。考虑稍后再部署整个应用程序,以便让MongoDB服务器与服务一起在某个云或服务器上运行。
可以通过设置其他容器并将其链接到Go Web App来解决该问题。 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服务。
答案 1 :(得分:-1)
如果mongoDB服务器正在主机中运行,请用主机IP替换localhost。