我正在研究golang项目,最近我阅读了有关docker的信息,并尝试在我的应用程序中使用docker。我正在使用mongoDB数据库。 现在的问题是,我正在创建Dockerfile来安装所有软件包并编译和运行go项目。 我在本地运行mongo数据,如果我在没有docker的情况下运行go程序,它会给我输出,但是如果我在同一项目中使用docker(只需在此项目上安装依赖项并运行项目),则编译成功但不会给出任何输出,出现错误:
CreateSession: no reachable servers
我的Dockerfile ::
# Start from a Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang
WORKDIR $GOPATH/src/myapp
# Copy the local package files to the container's workspace.
ADD . /go/src/myapp
#Install dependencies
RUN go get ./...
# Build the installation command inside the container.
RUN go install myapp
# Run the outyet command by default when the container starts.
ENTRYPOINT /go/bin/myapp
# Document that the service listens on port 8080.
EXPOSE 8080
EXPOSE 27017
答案 0 :(得分:2)
在Docker中运行应用程序时,它在虚拟环境中运行;就像另一台计算机一样,但是一切都是虚拟的,包括网络。
要将容器连接到主机,Docker会为其提供一个特殊的IP地址,并为该IP提供一个值为host.docker.internal
的URL。
因此,假设mongo在主机的每个接口上运行绑定,则可以从容器中使用连接字符串访问它:
mongodb://host.docker.internal:21017 / database
简化Just use host.docker.internal as your mongodb hostname.
答案 1 :(得分:1)
在golang项目中,如何指定与mongodb的连接?本地主机:27017?
如果您在代码中使用本地主机,则您的docker容器将为本地主机,并且由于同一容器中没有mongodb,因此您会收到错误消息。
如果要使用命令行docker run ...
启动docker,请添加--network="host"
。如果您使用的是docker-compose,请添加network_mode: "host"
理想情况下,您可以在自己的容器中设置mongodo并从docker-compose.yml连接它们-但这不是您想要的。所以,我不会再讨论了。
在以后的问题中,请尽可能包括相关的Dockerfile,docker-compose.yml。这将帮助我们给出更具体的答案。