docker-compose管理容器network与ip


docker-compose管理容器时,通常需要设定network,指定容器的ip,这样容器在启动时会通过指定的ip与宿主机桥接网络通信,同样可以通过ip实现容器之间的通信。

新建docker的network桥接网络:

docker network create docker1 -o com.docker.network.bridge.name=docker1 -o com.docker.network.bridge.host_binding_ipv4=0.0.0.0 --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1

  • docker1 桥接网卡名称
  • subnet 子网掩码
  • gateway 网关

查看新建网桥

docker network ls
在这里插入图片描述
docker network inspect docker1
在这里插入图片描述

docker容器:

docker-compose.yml管理多个容器

version: '2'
networks:
  docker1:               ### 自建的network
    external: true
services:
 mgnt:
  image: mgnt
  container_name: mgnt
  hostname: mgnt
  restart: always
  command: supervisord -n -c /code/mgnt/supervisord.conf
  volumes:
   - /opt/mgnt/conf/serverConfig.json:/code/mgnt/frontend/static/serverConfig.json 
   - /opt/mgnt/conf/oem:/code/mgnt/frontend/static/img/oem
   - /opt/mgnt/conf/oem.json:/code/mgnt/frontend/static/oem.json
   - /opt/mgnt/conf/settings.py:/code/mgnt/backend/server/settings.py 
   - /opt/mgnt/conf/supervisord.conf:/code/mgnt/supervisord.conf 
   - /opt/mgnt/conf/redis/redis.conf:/etc/redis.conf 
   - /opt/mgnt/conf/license:/etc/fass/license
  ports:
   - "8000:8000"
   - "80:80"
  depends_on:
   - mgnt_mysql 
   - influxdb
  networks:
    docker1:
      ipv4_address: 172.20.0.3               ###容器固定ip 
 
 mgnt_mysql:
  image: mgnt_mysql
  container_name: mgnt_mysql
  hostname: mgnt_mysql
  restart: always
  ports:
   - 3308:3306
  volumes:
   - /opt/mgnt/data:/var/lib/mysql 
   - /opt/mgnt/conf/mysql/my.cnf:/etc/my.cnf 
   - /opt/mgnt/conf/mysql/conf.d:/etc/mysql/conf.d 
   - /opt/mgnt/conf/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d 
  environment:
   - MYSQL_PORT=3306 
   - MYSQL_DATABASE=mgnt 
   - MYSQL_USER=admin 
   - MYSQL_PASSWORD=sysadmin 
   - MYSQL_ROOT_PASSWORD=sysadmin 
  networks:
    docker1:
      ipv4_address: 172.20.0.2
 influxdb:
  image: influxdb:alpine
  container_name: influxdb
  hostname: influx
  restart: always
  volumes:
    - /var/lib/influxdb:/var/lib/influxdb
  ports:
   - "8086:8086"
  networks:
    docker1:
      ipv4_address: 172.20.0.4

开启容器后docker1网桥内容

[
    {
        "Name": "docker1",
        "Id": "d1f2a4c0afe4b418e855dacc68f7fe3991d93b51c1ebd049ce1c5c81b598ae24",
        "Created": "2021-02-01T02:41:48.327058853-05:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "53b25b5832b6757f81653e2ed6f5a237d59950825c9e9015272dbd0ff673da5e": {
                "Name": "mgnt",
                "EndpointID": "0ed1a8d0d6cf444320e0fe985d2bcfcf70d80111b37928eb1519045f8ffa0336",
                "MacAddress": "02:42:ac:14:00:03",
                "IPv4Address": "172.20.0.3/16",            ### 容器ip
                "IPv6Address": ""
            },
            "b3623f6a04d56f7ade8022d289fbbd4fbd3409a5da1c08cd9293511b656481a5": {
                "Name": "mgnt_mysql",
                "EndpointID": "f05cf474e861e86e8cd7dfa6a5bdc43368c6af3b01e22d657f92b0a2ace913f1",
                "MacAddress": "02:42:ac:14:00:02",
                "IPv4Address": "172.20.0.2/16",           ### 容器ip
                "IPv6Address": ""
            },
            "e99f3d048e384732c12673989aea3814ecbf873e5850d87b36fe70d016861293": {
                "Name": "influxdb",
                "EndpointID": "17a3874417ee95b91c421a4beb281df067682eaf46e4f37ab929f76866b6c795",
                "MacAddress": "02:42:ac:14:00:04",
                "IPv4Address": "172.20.0.4/16",         ### 容器ip
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker1"
        },
        "Labels": {}
    }
]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用docker-compose可以通过自定义网络分配IP地址。在docker-compose文件中定义一个网络,然后为该网络设置一个IP范围,通过这个范围来分配IP地址给容器。 首先,在docker-compose.yml文件中定义一个网络,在`networks`部分添加一个新的网络,并为该网络指定一个自定义的名称,例如"my_network"。 ``` version: '2' services: my_service: image: my_image networks: - my_network networks: my_network: ipam: config: - subnet: 192.168.0.0/24 ``` 上面的例子中,我们定义了一个名为"my_network"的网络,并为该网络指定了一个IP范围192.168.0.0/24。 然后,将容器添加到该网络中。在服务的定义中,使用`networks`属性将服务连接到上述定义的网络。 这样,当使用`docker-compose up`启动容器时,容器将被分配一个在IP范围内的IP地址。 需要注意的是,如果要为多个容器分配独立的IP地址,需要确保IP范围的大小足够容纳所有容器所需的地址。 另外,使用自定义网络可以实现多个容器之间的通信,它们可以通过容器名称来相互访问,而无需使用IP地址。 综上所述,通过在docker-compose文件中定义自定义网络并为其设置IP范围,可以实现为容器分配IP地址。 ### 回答2: Docker Compose 允许我们在容器部署时使用自定义网络分配 IP 地址。下面是关于 Docker Compose 自定义网络分配 IP 地址的一些重要信息: 1. 自定义网络的配置:在 Docker Compose 文件中,我们可以使用 `networks` 关键字定义自定义网络,并为其指定一个名称。例如: ```yaml version: '3' services: app: # 定义自定义网络 networks: - my-network networks: my-network: # 可选配置网络驱动 driver: bridge ``` 2. IP 地址分配方式:Docker Compose 支持三种不同的 IP 地址分配方式,分别是 `default`、`bridge` 和 `host`。默认情况下,Docker Compose 使用 `default` 分配方式。通过在网络配置中指定 `ipam` 选项,我们可以使用其他分配方式。 3. 使用 `default` 分配方式:如果使用默认的 `default` 分配方式,那么 Docker Compose 将自动为容器分配 IP 地址,并且会保持容器名称与 IP 地址之间的关联。例如,我们可以通过在服务定义中使用 `networks` 字段指定网络,并通过使用该网络容器名称来访问容器。 ```yaml services: app1: networks: - my-network app2: networks: - my-network networks: my-network: ``` 在这种情况下,Docker Compose 将为 `app1` 容器分配一个 IP 地址,并将其映射到容器名称 `my-app1`。 4. 使用其他分配方式:如果我们希望自定义 IP 地址分配方式,可以在网络配置中使用 `ipam` 选项。例如,我们可以指定一个静态 IP 地址供容器使用。 ```yaml services: app: networks: my-network: ipv4_address: 192.168.0.2 networks: my-network: ipam: config: - subnet: 192.168.0.0/16 ``` 在这种情况下,Docker Compose 将为 `app` 容器分配指定的 IP 地址 192.168.0.2。 通过以上的配置,我们可以根据需要在 Docker Compose 中自定义网络分配 IP 地址。这样可以更好地控制容器之间的通信,并实现特定的网络需求。 ### 回答3: 在Docker Compose中,我们可以使用自定义网络来对容器进行分组和分配IP地址。通过自定义网络,我们可以更好地管理容器之间的通信和连接。 首先,在docker-compose.yml文件中定义一个自定义网络。我们可以使用以下语法来创建一个自定义网络: ```yml networks: <network_name>: driver: <driver_name> ``` 在上面的代码片段中,`<network_name>`是我们给网络取的名称,`<driver_name>`是网络使用的驱动程序。 例如,我们可以创建一个名为`my_network`的自定义网络,并使用默认的`bridge`驱动程序,只需在docker-compose.yml文件中添加以下代码: ```yml networks: my_network: driver: bridge ``` 一旦我们定义了一个自定义网络,我们可以将容器连接到这个网络,并为它们分配IP地址。 要将容器连接到自定义网络,我们可以使用以下代码: ```yml services: <service_name>: networks: - <network_name> ``` 在上面的代码片段中,`<service_name>`是我们要将容器连接到的服务名称,`<network_name>`是我们之前定义的自定义网络名称。 例如,如果我们要将一个名为`web`的服务连接到`my_network`网络,我们可以在docker-compose.yml文件中添加以下代码: ```yml services: web: networks: - my_network ``` 最后,我们可以为连接到自定义网络容器分配IP地址。Docker将自动为连接到网络容器分配IP地址。我们可以使用以下代码来查看容器IP地址: ```bash docker network inspect <network_name> ``` 在上面的命令中,`<network_name>`是我们之前定义的自定义网络名称。 总之,使用Docker Compose的自定义网络,我们可以轻松地进行容器的分组和分配IP地址。通过定义自定义网络并连接容器,我们可以实现灵活的容器通信和连接管理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值