首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker复合-将网络模式更改为“主机”将导致错误:守护进程的错误响应:未能向沙箱添加接口veth701c890。

Docker复合-将网络模式更改为“主机”将导致错误:守护进程的错误响应:未能向沙箱添加接口veth701c890。
EN

Stack Overflow用户
提问于 2022-11-28 06:10:15
回答 2查看 58关注 0票数 0

这个问题之后,我编辑了网关容器以使用host网络模式:

代码语言:javascript
复制
services:
  gateway:
  ...
  network_mode: "host"

然后docker compose up -d给了我这个:

守护进程的错误响应:未能将接口veth701c890添加到沙箱:错误将接口"veth701c890“IP设置为172.26.0.11/16:无法在沙箱接口中编程地址172.26.0.11/16,因为它与现有路由{Ifindex: 4 Dst: 172.26.0.0/16 Src: 172.26.0.1 Gw:标志:[] Table: 254冲突:

我重新启动了码头,甚至服务器。不走运。

docker-compose.yml看起来如下(只有gateway容器已经发布了端口):

代码语言:javascript
复制
version: '3.4'

services:
  gateway:
    image: <ms-yarp>
    environment:
      - ASPNETCORE_URLS=https://+:443;http://+:80
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./tls/:/tls/
    networks:
      - mynet
    restart: on-failure

  orders:
    image: <registry>/orders
    environment:
      - ASPNETCORE_URLS=http://+:80
    networks:
      - mynet
    restart: on-failure

  users:
    image: <registry>/users
    environment:
      - ASPNETCORE_URLS=http://+:80
    networks:
      - mynet
    restart: on-failure

  smssender:
    image: <registry>/smssender
    environment:
      - ASPNETCORE_URLS=http://+:80
    networks:
      - mynet
    restart: on-failure

  logger:
    image: <registry>/logger
    environment:
      - ASPNETCORE_URLS=http://+:80
    networks:
      - mynet
    restart: on-failure

  notifications:
    image: <registry>/notifications
    environment:
      - ASPNETCORE_URLS=http://+:80
    networks:
      - mynet
    restart: on-failure

  cacheserver:
    image: <registry>/redis
    networks:
      - mynet
    restart: on-failure

  ...

networks:
  mynet:
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-29 10:37:53

您不能将主机网络与任何其他Docker网络选项结合起来。如果将network_mode: host与其他networks:ports:选项组合在一起,至少某些版本的some已经发出警告。

在这个特定的设置中,主机网络的另一个意思是使用它的一个容器是“外部Docker”,用于连接到其他容器。它的工作方式与非容器进程的工作方式完全相同。这意味着其他容器需要发布ports:才能从网关访问,而网关配置则需要使用localhost和已发布的端口号来到达其他容器。

代码语言:javascript
复制
version: '3.8'
services:
  gateway:
    image: <ms-yarp>
    network_mode: host
  orders:
    image: <registry>/orders
    ports:
      - '8001:80'
    networks:
      - mynet
代码语言:javascript
复制
{
  "ReverseProxy": {
    "Clusters": {
      "cluster": {
        "Destinations": {
          "orders": {
            "Address": "http://localhost:8001"
          }
        }
      }
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2022-11-29 10:59:35

类似于这样的情况:(在windows WSL2上不能使用Desktop,至少我甚至不能运行文档中的nginx示例)

代码语言:javascript
复制
version: '3.4'

services:
  gateway:
    image: <ms-yarp>
    environment:
      - ASPNETCORE_URLS=https://+:443;http://+:80
    network_mode: host
    volumes:
      - ./tls/:/tls/
    restart: on-failure

  orders:
    image: <registry>/orders
    environment:
      - ASPNETCORE_URLS=http://+:80
    ports:
      - 8080:80  
    networks:
      - mynet      
    restart: on-failure

  users:
    image: <registry>/users
    environment:
      - ASPNETCORE_URLS=http://+:80
    ports:
      - 8081:80            
    networks:
      - mynet      
    restart: on-failure

  smssender:
    image: <registry>/smssender
    environment:
      - ASPNETCORE_URLS=http://+:80
    ports:
      - 8082:80                  
    networks:
      - mynet      
    restart: on-failure

  logger:
    image: <registry>/logger
    environment:
      - ASPNETCORE_URLS=http://+:80
    ports:
      - 8082:80                  
    networks:
      - mynet      
    restart: on-failure

  notifications:
    image: <registry>/notifications
    environment:
      - ASPNETCORE_URLS=http://+:80
    ports:
      - 8083:80                  
    networks:
      - mynet      
    restart: on-failure

  cacheserver:
    image: <registry>/redis
    restart: on-failure
    networks:
      - mynet    

在网关服务配置中,还需要更改

http://orders:80http://localhost:8080

http://users:80http://localhost:8081等等

此外,还将8080到8083的停靠主机上的端口限制为只能从本地主机访问,而不能从internet访问。

您甚至可以将所有容器(网关除外)放到一个只能从运行网关容器的对接主机访问的不同的对接主机上,并将网关中的配置从http://orders:80更改为http://otherdockerhost:80等等。

但是,由于这种对接组合是不可行的,您将需要使用docker run命令“手动”创建容器(或者有两个单独的组合项目,一个用于网关,一个用于其他服务),因此这里需要更严重的容器编排工具,比如kubernetes (您可以尝试码头群、游牧人或任何其他容器调度器,但这些并不受欢迎,所以如果您对kubernetes和码头群都不熟悉,或者其他您从kubernetes开始的更好的方法,您也会从这个项目和您的个人承运人那里获得长远的利益)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74596620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档