docker 网络和 /etc/resolv.conf 出现问题

docker 网络和 /etc/resolv.conf 出现问题

第一种情况:

我有以下 docker-compose 文件

version: '3.4'

services:
  api:
    image: ${DOCKER_REGISTRY}project.api
    ports:
      - "5080:5080"
      - "5081:5081"
    build:
      context: .
      dockerfile: src/Api/Dockerfile.Debug
    environment:
      - ASPNETCORE_URLS=http://+:5080;http://+:5081;http://+:5443
      - ASPNETCORE_HTTP_PORT=5080
      - MANAGEMENT_HTTP_PORT=5081
      - ASPNETCORE_ENVIRONMENT=Local

执行此操作时,docker-compose up容器无法访问某些应该向容器中运行的 api 提供令牌的端点。所以我遇到了超时错误。

第二种情况: 但是,使用以下文件可以正常工作。

version: '3.4'

services:
  api:
    image: ${DOCKER_REGISTRY}project.api
    build:
      context: .
      dockerfile: src/Api/Dockerfile.Debug
    environment:
      - ASPNETCORE_URLS=http://+:5080;http://+:5081;http://+:5443
      - ASPNETCORE_HTTP_PORT=5080
      - MANAGEMENT_HTTP_PORT=5081
      - ASPNETCORE_ENVIRONMENT=Local
    network_mode: host

值得注意的是,在我的主机上,只有当我的 VPN 运行时才能访问令牌端点。

/etc/resolv.conf/我试图查看这两种情况下容器中的内容(使用docker exec -it "container_id" bash):

第一种情况:(非工作情况)

search XXX.biz YYY.biz
nameserver 127.0.0.11
options ndots:0

第二种情况:(工作情况)

search XXX.biz  YYY.biz
nameserver 10.10.***.***
nameserver 10.11.***.***
nameserver 8.8.8.8

我尝试添加缺少的条目名称服务器 10.10。 名称服务器 10.11。 名称服务器 8.8.8.8

如下daemon.json

{
    "dns": [ "10.10.***.***", "10.11.***.***", "8.8.8.8" ],
    "dns-search": [ "XXX.biz", "YYY.biz" ]
}

但它并没有解决第一种情况的问题,而且我仍然没有在/etc/resolve.conf/容器内的文件中看到这些条目。

有什么想法如何解决第一种情况吗?

PS:我有一台 Debian 10 机器

我已经尝试了以下所有尝试,但没有任何效果

尝试1:我还尝试dns在 docker-compose 文件中添加条目,但它也不起作用。

尝试2:在 docker-compose 和networ_mode : brdige.这也添加了 中的条目,/etc/resolv.conf但应用程序仍然无法获取令牌。

尝试3:手动安装,其中 ./resolv.conf 文件包含预期内容。

volumes:
- ./resolv.conf:/etc/resolv.conf 

这也添加了 中的条目,/etc/resolv.conf但应用程序仍然无法获取令牌。

错误是

An error has occurred in Timed KeyCloak Authentificated Service
api_1  |       System.Net.Http.HttpRequestException: Resource temporarily unavailable (oauth2.XXX.com:443)

该问题似乎与一般访问互联网有关,而不仅仅是访问令牌提供商。事实上,在容器内执行以下脚本会返回“Offline”

echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi
Offline

相关内容