英文:
lookup host.docker.internal: no such host
问题
我试图运行sudo docker-compose up
来启动我的应用程序并连接到本地的MongoDB,但是遇到了这个错误:
time="2021-12-28T08:31:54Z" level=fatal msg="server selection error: context deadline exceeded, current topology: { Type: Unknown, Servers: [{ Addr: host.docker.internal:27017, Type: Unknown, Last error: connection() error occured during connection handshake: dial tcp: lookup host.docker.internal: no such host }, ] }"
最初,我尝试将localhost替换为host.docker.internal
,以便将MongoDB URI连接到Docker网络,但似乎无法找到它。我正在使用最新版本的Docker,所以不是不支持的Docker版本的问题。
docker-compose.yaml
文件内容如下:
version: '3.3'
services:
app:
build:
context: .
dockerfile: dockerfile
ports:
- "8080:20717"
restart: unless-stopped
env_file: .env
networks:
- ext
- int
networks:
ext:
int:
internal: true
我之前有一个extra_hosts
部分,但是用networks
部分替换了它。
extra_hosts:
- "host.docker.internal:127.0.0.1"
我的.env
文件包含了应用程序所需的URI和其他必要变量。
DB_URI=mongodb://host.docker.internal:27017
CITY_DB=nht_cities
COL_USER=user
COL_CITY=city
USER_AUTH_TOKEN=50dbafa...
我的应用程序本身在端口8080上运行。
fmt.Println("Server running at port 8080")
log.Fatal(http.ListenAndServe(":8080", r)) // r是路由器
英文:
I was trying to run sudo docker-compose up to get my app running and connect to a localhost mongodb but I ran into this error
time="2021-12-28T08:31:54Z" level=fatal msg="server selection error: context deadline exceeded, current topology: { Type: Unknown, Servers: [{ Addr: host.docker.internal:27017, Type: Unknown, Last error: connection() error occured during connection handshake: dial tcp: lookup host.docker.internal: no such host }, ] }"
Initially, I tried to replace localhost with host.docker.internal
instead to have the mongo uri connect with the docker network but it doesn't seem to be able find it. I'm on the latest version of docker too, so it's not a question of unsupported docker version.
docker-compose.yaml
version: '3.3'
services:
app:
build:
context: .
dockerfile: dockerfile
ports:
- "8080:20717"
restart: unless-stopped
env_file: .env
networks:
- ext
- int
networks:
ext:
int:
internal: true
I previously had an extra_hosts
part but replaced that with the networks
portion.
extra_hosts:
- "host.docker.internal:127.0.0.1"
My .env
file contains the URI and some other necessary variables for the app
DB_URI=mongodb://host.docker.internal:27017
CITY_DB=nht_cities
COL_USER=user
COL_CITY=city
USER_AUTH_TOKEN=50dbafa...
My app itself runs on port 8080
fmt.Println("Server running at port 8080")
log.Fatal(http.ListenAndServe(":8080", r)) // r being the router
答案1
得分: 6
将以下内容添加到docker compose中的"app"服务中:
extra_hosts:
- "host.docker.internal:host-gateway"
然后你的应用程序将能够连接到在主机上运行的mongodb。
英文:
Add this to "app" service in docker compose
extra_hosts:
- "host.docker.internal:host-gateway"
Then your app will be able to connect to mongodb running on host machine.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论