blog/_posts/Linux/docker/container-network-ip.md

2.6 KiB
Raw Blame History

title date tags
🫡Docker运行一个容器并固定IP 2023-8-07 Docker

一些特殊部署场景下需要指定某个容器ip以便于访问。可以使用Docker的网络模式来间接地控制容器的IP地址所以这边记录一下分别在单独docker与docker-compose配置示例

docker

1.自定义一个名为my-docker-net网络

docker network create --subnet=172.0.0.0/24 my-docker-net

2.指定容器网络并设置固定ip

docker run -d   --net=my-docker-net --ip=172.0.0.3 --name=[容器名字] -v [镜像名字]

--net 指定网络
--ip 指定ip

通过IP172.0.0.3访问该容器了。

docker-compose

在docker-compose.yml文件中networks节点进行配置

1.subnet 进行配置网段

networks:
  default:
    driver: bridge
    ipam:
      driver: default
      # 解除下面的注释可以设置网段用于nginx等容器固定容器IP
      config:
        - subnet: 172.0.0.0/24

2.对应service下networks节点进行配置固定ip

version: "3"
    services:
        nginx:
            networks:
                default:
                    ipv4_address: 172.0.0.3

以上命令对compose的网络配置一个172.0.0.0/24网段然后指定其中nginx指定ip为172.0.0.3

补充知识

172.0.0.0/24 是一个 CIDRClassless Inter-Domain Routing表示法它使用网络地址和掩码长度来表示一个 IP 地址范围。255.255.255.0 是对应的子网掩码,也称为网络掩码。包含了从 172.0.0.0 到 172.0.0.255 的所有 IP 地址。

在 CIDRClassless Inter-Domain Routing表示法中斜线后的数字表示掩码长度用于指示网络地址中的连续前缀位数。

具体来说,掩码长度是指网络地址中左边的连续位数,用于表示网络部分。剩余的位数则用于表示主机部分。

对于 IPv4 地址,掩码长度的有效范围是从 0 到 32。较小的掩码长度表示更大的网络范围而较大的掩码长度表示更小的网络范围。

例如:

  1. /8 表示网络地址中的前 8 位用于网络部分,后 24 位用于主机部分。
  2. /16 表示网络地址中的前 16 位用于网络部分,后 16 位用于主机部分。
  3. /24 表示网络地址中的前 24 位用于网络部分,后 8 位用于主机部分。

因此/8 中的数字 8 表示网络地址中的前 8 位用于网络部分,剩下的位用于主机部分。这意味着 172.0.0.0/8 表示一个非常大的网络范围,其中 172.0.0.0 到 172.255.255.255 都属于同一个网络。