美文网首页
docker新配置的network不生效的解决方法

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

作者: AlwaysDead | 来源:发表于2018-11-07 14:53 被阅读0次

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)

相关文章

网友评论

      本文标题:docker新配置的network不生效的解决方法

      本文链接:https://www.haomeiwen.com/subject/bkqvxqtx.html