我正在做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发布于 2018-09-13 21:44:44
当您在Docker中运行您的应用程序时,它运行在一个虚拟环境中;它就像另一台计算机,但一切都是虚拟的,包括网络。
为了将您的容器连接到主机,Docker会给它一个特殊的ip地址,并给这个ip一个值为host.docker.internal的url。
因此,假设mongo在主机上的每个接口上运行绑定,则可以使用连接字符串从容器到达它:
mongodb://主机.docker.Internal:21017/数据库
简化,Just use host.docker.internal as your mongodb hostname.
发布于 2018-09-14 00:35:20
在您的golang项目中,如何指定到mongodb的连接?本地主机:27017?
如果在代码中使用localhost,那么docker容器就是localhost,因为在同一个容器中没有mongodb,所以会出现错误。
如果您使用命令行docker run ...启动docker,请添加--network="host"。如果使用的是docker-compose,则添加network_mode: "host"
理想情况下,您应该将mongodo设置在它自己的容器中,并通过docker-compose.yml将它们连接起来--但这不是您所要求的。因此,我不会深入讨论这一点。
在以后的问题中,请尽可能包含相关的Dockerfile、docker-compose.yml。它将帮助我们给出更具体的答案。
https://stackoverflow.com/questions/52314900
复制相似问题