[Tutorials] 创建docker 容器的时候指定IP
Tofloor
poster avatar
酷谷的谷子
deepin
2025-08-17 11:11
Author

有些奇葩服务又要使用内网IP那容器分配的,又布固定会不定时变化,哪个变化了服务就跑不起来,这种设计简直神经病

给豆包的问题:

docker 在创建容器的时候怎么指定一个IP 比如172.17.0.3这个是172.17.0.3分配我想把这个IP变成固定的

在 Docker 中为容器分配固定 IP 地址,可以通过创建自定义网络并指定 IP 范围的方式实现。以下是具体步骤:

  1. 首先创建一个自定义网络,指定子网和网关:

docker network create --driver bridge --subnet 172.17.0.0/16 --gateway 172.17.0.1 mynetwork

  1. 然后在创建容器时,通过 --network 和 --ip 参数指定网络和固定 IP:

docker run -d --name mycontainer --network mynetwork --ip 172.17.0.3 [镜像名称]

这样创建的容器就会拥有固定的 IP 地址 172.17.0.3。

到这里我还看不懂接着给豆包提问:

docker network create --driver bridge --subnet 172.17.0.0/16 --gateway 172.17.0.1 mynetwork这个是什么意思 mynetwork是网络名称?是不是基于bridge的模式

是的,你理解得没错。这条命令的含义如下:

  1. docker network create:创建一个新的 Docker 网络
  2. --driver bridge:指定网络驱动为 bridge 模式(桥接模式),这是 Docker 默认的网络模式
  3. --subnet 172.17.0.0/16:指定该网络的子网范围为 172.17.0.0/16,意味着该网络可以分配 172.17.x.x 范围内的 IP 地址
  4. --gateway 172.17.0.1:指定该网络的网关地址为 172.17.0.1
  5. mynetwork:这是你为这个网络指定的名称,可以根据需要自定义(比如改成 app-network、my-bridge 等)

所以这个命令创建了一个名为mynetwork的桥接模式网络,使用 172.17.0.0/16 网段,网关为 172.17.0.1。

后续创建容器时,只要指定--network mynetwork并通过--ip参数指定该网段内的 IP,就能实现容器 IP 的固定分配。

到这里实际当中我就不能使用这个IP防止其奇奇怪怪的问题 必须排除这个IP端 比如使用 172.66.0.0 172.66.0.1

我简单理解就是 172.66.0.2 到172.66.0.254

使用AI技巧你需要让AI解决什么样的问题,这个根你的知识储备也有关

我怎么知道哪些IP被使用了比如 172.17.0.3是否被使用了

要查看 Docker 网络中已分配的 IP 地址(包括检查 172.17.0.3 是否被使用),可以通过以下几种方法:

方法 1:查看网络详情中所有容器的 IP

使用 docker network inspect 命令查看指定网络的详细信息,其中会列出该网络中所有容器的 IP 分配情况:

替换为你的网络名称(比如前面创建的 mynetwork) docker network inspect mynetwork

在输出结果中,找到 Containers 部分,会显示该网络中所有容器的信息,包括每个容器的 IPv4Address(即分配的 IP 地址)。

例如,若 172.17.0.3 已被使用,会类似这样显示:

"Containers": { "容器ID": { "Name": "容器名称", "IPv4Address": "172.17.0.3/16", ... }, ... }

方法 2:通过 ping 命令简单验证

如果只是想快速检查某个 IP 是否被使用,可以直接 ping 该 IP(需确保主机能与容器网络通信):

ping 172.17.0.3

  • 如果能 ping 通,说明该 IP 已被某个容器占用
  • 如果 ping 不通,可能未被使用(但需排除除容器防火墙限制的情况)

通过以上方法,就能确定 172.17.0.3 是否已被分配给某个容器了。

Reply Favorite View the author
All Replies
MeGusta
deepin
2025-08-17 11:53
#1

这是我在群晖docker上部署calibre-web的例子,把IP设置为 127.10.0.0

services:
    calibre-web:
        image: 'johngong/calibre-web:latest'
        container_name: calibre-web
        restart: always
        ports:
            - '31183:8083'
            - '31181:8080'
        volumes:
            - /volume1/docker/netapps/calibre-web/config:/config
            - /volume1/docker/netapps/calibre-web/library:/library
            - /volume1/docker/netapps/calibre-web/autoaddbooks:/autoaddbooks
            - /volume1/docker/netapps/ssl:/ssl     # ssl private key permission should set to 644
        environment:
            - ENABLE_CALIBRE_SERVER_OPDS=true
            - CALIBRE_ASCII_FILENAME=false
            - CALIBRE_WEB_LANGUAGE=zh_Hans_CN
            - UID=1000
            - GID=1000
            - CALIBRE_SERVER_USER=username
            - CALIBRE_SERVER_PASSWORD=passwd
        networks:
          cw-net:
            ipv4_address: 172.10.0.2

networks:
  cw-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.10.0.0/16
          gateway: 172.10.0.1
Reply View the author
酷谷的谷子
deepin
2025-08-17 15:11
#2
MeGusta

这是我在群晖docker上部署calibre-web的例子,把IP设置为 127.10.0.0

services:
    calibre-web:
        image: 'johngong/calibre-web:latest'
        container_name: calibre-web
        restart: always
        ports:
            - '31183:8083'
            - '31181:8080'
        volumes:
            - /volume1/docker/netapps/calibre-web/config:/config
            - /volume1/docker/netapps/calibre-web/library:/library
            - /volume1/docker/netapps/calibre-web/autoaddbooks:/autoaddbooks
            - /volume1/docker/netapps/ssl:/ssl     # ssl private key permission should set to 644
        environment:
            - ENABLE_CALIBRE_SERVER_OPDS=true
            - CALIBRE_ASCII_FILENAME=false
            - CALIBRE_WEB_LANGUAGE=zh_Hans_CN
            - UID=1000
            - GID=1000
            - CALIBRE_SERVER_USER=username
            - CALIBRE_SERVER_PASSWORD=passwd
        networks:
          cw-net:
            ipv4_address: 172.10.0.2

networks:
  cw-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.10.0.0/16
          gateway: 172.10.0.1

这个docker compose确实挺方便的

Reply View the author