如何为 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 linkip addr 命令设置 "bridge br0" 并使用 docker -d -b br0 启动 docker

您可以使用 pipework 分配一个固定的 ip,但它不是 "the docker way"。我同意阿德里安的观点。重新设计远离固定 IP。