如何为 docker 容器正确指定 IP
how to properly specify an IP for a docker container
我正在尝试通过以下方式为我的 docker 容器明确指定 IP 地址:
sudo docker run -it -p 172.17.0.2:10000:10000 -p 9000:9000 -p 9090:9090 -v /home/eugene/dev/shared:/opt/shared -d eugene/dev_img_1.3
我收到以下错误:
Error response from daemon: Cannot start container b2242e5da6e1b701ba4880f25fa8d465d5f008787b49898ad9e46eb26e417e48: port has already been allocated
我真的不关心端口 10000。我的目标是拥有一个我选择的特定容器 IP,以及将端口 9000 和 9090 暴露给主机。
我已经查看了其他一些问题,但没有看到执行此操作的清晰语法
-p
参数用于将端口从容器转发到主机,而不是用于分配 IP。
没有简单的方法可以将固定 IP 分配给 Docker 容器,我强烈建议您不要尝试。而是重新构建您的系统,使其不依赖于固定 IP。如果这真的不可能,我认为您可以使用 LXC 执行驱动程序和各种标志来选择 IP,但我强烈建议不要这样做。
这可以通过不同的方式完成。
您可以编辑系统范围的 Docker 服务器设置(通过在 /etc/default/docker 中编辑 DOCKER_OPTS)并在 Ubuntu 中添加选项 --ip=IP_ADDRESS
和然后重新启动你的服务器。如果您只使用 1 个 docker 容器并希望 dockers IP 与您的主机相同,请使用 --net=host
标志启动 docker 容器以将容器设置为具有主机 IP 地址。
其他方法是在服务器启动时配置这些选项(通过在 /etc/default/docker 中编辑 DOCKER_OPTS):
--bip=CIDR
— 为 "docker0" 网桥提供特定的 IP 地址和网络掩码,使用标准表示法,如 192.168.1.8/23。
例如 --fixed-cidr=192.168.1.0/25
,您的容器的 IP 将从 192.168.1.0/24 子网的前半部分选择。每次创建新容器时都会使用 "docker0" 以太网桥设置。您正在尝试使用 -p
标志将容器的端口绑定到特定端口,这不会帮助您为容器分配 IP 地址。
在任何特定范围内分配 IP 地址的另一种方法(示例:172.30.1.21/30)。使用 stop docker
停止 docker,然后使用 ip link
和 ip addr
命令设置 "bridge br0" 并使用 docker -d -b br0
启动 docker
您可以使用 pipework 分配一个固定的 ip,但它不是 "the docker way"。我同意阿德里安的观点。重新设计远离固定 IP。
我正在尝试通过以下方式为我的 docker 容器明确指定 IP 地址:
sudo docker run -it -p 172.17.0.2:10000:10000 -p 9000:9000 -p 9090:9090 -v /home/eugene/dev/shared:/opt/shared -d eugene/dev_img_1.3
我收到以下错误:
Error response from daemon: Cannot start container b2242e5da6e1b701ba4880f25fa8d465d5f008787b49898ad9e46eb26e417e48: port has already been allocated
我真的不关心端口 10000。我的目标是拥有一个我选择的特定容器 IP,以及将端口 9000 和 9090 暴露给主机。
我已经查看了其他一些问题,但没有看到执行此操作的清晰语法
-p
参数用于将端口从容器转发到主机,而不是用于分配 IP。
没有简单的方法可以将固定 IP 分配给 Docker 容器,我强烈建议您不要尝试。而是重新构建您的系统,使其不依赖于固定 IP。如果这真的不可能,我认为您可以使用 LXC 执行驱动程序和各种标志来选择 IP,但我强烈建议不要这样做。
这可以通过不同的方式完成。
您可以编辑系统范围的 Docker 服务器设置(通过在 /etc/default/docker 中编辑 DOCKER_OPTS)并在 Ubuntu 中添加选项 --ip=IP_ADDRESS
和然后重新启动你的服务器。如果您只使用 1 个 docker 容器并希望 dockers IP 与您的主机相同,请使用 --net=host
标志启动 docker 容器以将容器设置为具有主机 IP 地址。
其他方法是在服务器启动时配置这些选项(通过在 /etc/default/docker 中编辑 DOCKER_OPTS):
--bip=CIDR
— 为 "docker0" 网桥提供特定的 IP 地址和网络掩码,使用标准表示法,如 192.168.1.8/23。
例如 --fixed-cidr=192.168.1.0/25
,您的容器的 IP 将从 192.168.1.0/24 子网的前半部分选择。每次创建新容器时都会使用 "docker0" 以太网桥设置。您正在尝试使用 -p
标志将容器的端口绑定到特定端口,这不会帮助您为容器分配 IP 地址。
在任何特定范围内分配 IP 地址的另一种方法(示例:172.30.1.21/30)。使用 stop docker
停止 docker,然后使用 ip link
和 ip addr
命令设置 "bridge br0" 并使用 docker -d -b br0
启动 docker
您可以使用 pipework 分配一个固定的 ip,但它不是 "the docker way"。我同意阿德里安的观点。重新设计远离固定 IP。