Docker Run带参数运行镜像遇IP配置错误的技术求助
问题描述
执行指定固定IP的docker run命令启动容器时,出现以下错误:
docker: Error response from daemon: user specified IP address is supported only when connecting to networks with user configured subnets. ERRO[0000] error waiting for container: context canceled
通过docker network inspect net查看目标网络信息如下:
[ { "Name": "net", "Id": "d7fc56aa7d869c2f5ebcb12a5402fe565647542323ba93c323a8b5439e030466", "Created": "2023-04-25T15:33:05.454201322+05:30", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.21.0.0/16", "Gateway": "172.21.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]
使用的docker run命令:
docker run --gpus all --name server -p 9000:9000 \ -e SERVER_IP=172.21.1.4 \ -e SERVER_PORT=9000 \ -e CUDA_DRIVER_ID="cuda:0" \ --network net \ --ip 172.21.1.4 \ --device /dev/nvidia0:/dev/nvidia0 \ us-central1-docker.pkg.dev/mipeople-f0294/python-infer/python-infer_server \ python3 -u server.py
解决方法
方案一:重新创建支持固定IP的网络
错误原因是当前net网络的子网并非用户手动配置(即使inspect显示有子网,若为Docker自动分配则不支持手动指定IP),需重新创建网络并明确指定子网:
- 删除现有
net网络
docker network rm net
- 手动指定子网重新创建
net网络
docker network create --driver bridge --subnet 172.21.0.0/16 --gateway 172.21.0.1 net
- 再次执行原
docker run命令即可正常启动容器
方案二:取消固定IP配置(更灵活)
若无需强制固定IP,可去掉--ip参数,并将环境变量SERVER_IP改为容器名称server(Docker网络内支持通过容器名称互相访问),修改后的命令如下:
docker run --gpus all --name server -p 9000:9000 \ -e SERVER_IP=server \ -e SERVER_PORT=9000 \ -e CUDA_DRIVER_ID="cuda:0" \ --network net \ --device /dev/nvidia0:/dev/nvidia0 \ us-central1-docker.pkg.dev/mipeople-f0294/python-infer/python-infer_server \ python3 -u server.py
内容的提问来源于stack exchange,提问作者Akshay Geedan
相关产品推荐
相关产品推荐

