docker新配置的network不生效的解决方法

docker新配置的network不生效的解决方法:

今天发现docker yml文件新配置的networks不生效,

networks:
  net:
    external: false
    driver_opts: {
      com.docker.network.driver.mtu: '1450'
    }
  ipam:
    driver: default
    config:
      - subnet: 172.30.0.3/24
services:
  idGenService:
    container_name: idGenService
......
    networks:[
      net]
.....

后来通过 docker network ls 发现存在很多旧的服务network配置列表,

NETWORK ID          NAME                 DRIVER              SCOPE
c779da91cbe3        binlog_default       bridge              local
3848ae5369d8        bridge               bridge              local
381d383227b5        canal_default        bridge              local
40531abb1924        dapengmesh_default   bridge              local
fefbdba91dbc        docker_gwbridge      bridge              local
d6d428430a64        eywa_default         bridge              local
d42e165b8e95        eywa_net             bridge              local
d4f8772de814        eywaweb_default      bridge              local
954355e9ba6b        host                 host                local
pfjpi1b1m95y        ingress              overlay             swarm
cd041da886ce        kafka_default        bridge              local
c33d9f01d721        none                 null                local
28ae323aaa32        openapi_default      bridge              local
d6cfb6c41ba3        openapi_net          bridge              local
f49c9d373eb0        redis_default        bridge              local
43eedf3aabec        service_network      bridge              local
dd2c41cc9b51        tscompose_default    bridge              local
69a6e4617892        zookeeper_default    bridge              local

ps: 由于前面yml的配置写法,docker会为每个服务添加名为 xxService_networkName的新network配置,这样就会产生很多配置一样的network`

为了优化配置,能够重用相同配置的network,先通过 docker network rm networkId 删除旧的network配置

# 要删除network, 需要先把服务容器先停掉
docker stop $(docker ps | grep service | awk '{print $3}') 
# 根据networkId 批量删除旧服务的network
docker network rm $(docker network ls | grep service | awk '{print $1}')

手动创建network配置:

# 创建自定义的network, 配置mtu, 网段,driver选择bridge, 名为service_network
docker network create --driver=bridge \
  --subnet=xxx.xx.0.0/16 \
  --opt com.docker.network.driver.mtu=1450 \
  service_network

修改yml配置:

# 继承我们之前定义的network
networks:
 default:
    external:
      name: service_network
services:
  idGenService:
    container_name: idGenService
    environment: {
      database_encrypt_enable: 'true',
......

启动新的容器

docker-compose -f idGenService.yml -p idGenService up -d

查看结果:

发现mtu, ip的网段符合预期

[xxx@sandbox1_1 yamlDir]$ docker exec -it idGenService sh
/dapeng-container/bin # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:1E:00:03
          inet addr:172.30.0.3  Bcast:172.30.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:8167 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8549 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:454347 (443.6 KiB)  TX bytes:630990 (616.2 KiB)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文提供可用于与Docker网络及与网络中容器进行交互的network子命令的示例。这些命令可通过Docker E...
    周立_itmuch阅读 10,633评论 1 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,545评论 19 139
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,744评论 0 120
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,959评论 0 7
  • 熙熙跟爸爸玩,爸爸说你怎么不怕我,怕你妈妈啊?熙熙说:“因为妈妈太调皮了,老打我” 哎,我咋就成了这样的一个妈妈呢?
    熙熙0920阅读 243评论 0 1

友情链接更多精彩内容