docker端口映射或启动容器时报错

本文详细解析了在使用Docker进行端口映射或启动容器时遇到的常见错误,包括IPv4转发禁用导致的网络问题,以及自定义链DOCKER丢失引发的iptables配置失败。通过重启Docker服务,可以重新生成自定义链,解决此类问题。

docker端口映射或启动容器时报错

原始镜像如下:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xtjatswc/mycore2    v3                  73ce3cd97c01        About an hour ago   1.74GB
xtjatswc/mycore     latest              73ce3cd97c01        About an hour ago   1.74GB
microsoft/dotnet    latest              521411f3b61d        4 days ago          1.73GB

用docker tag 命令修改镜像REPOSITORY、TAG后,如下

[root@localhost tmp]# docker tag xtjatswc/mycore2:v3 xtjatswc/mycore4:v4
[root@localhost tmp]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xtjatswc/mycore2    v3                  73ce3cd97c01        2 hours ago         1.74GB
xtjatswc/mycore4    v4                  73ce3cd97c01        2 hours ago         1.74GB
xtjatswc/mycore     latest              73ce3cd97c01        2 hours ago         1.74GB
microsoft/dotnet    latest              521411f3b61d        4 days ago          1.73GB

这里如果把xtjatswc/mycore:latest删掉的话,再运行容器xtjatswc/mycore4:v4,就会出现如下错误

[root@localhost tmp]# docker run --name myc3 -p 8081:80 -d xtjatswc/mycore
WARNING: IPv4 forwarding is disabled. Networking will not work.
5a5cc306a6b36645d37fbf077f21ac91a53bf508e8e257aa74f353f761fcbfaf
docker: Error response from daemon: driver failed programming external connectivity on endpoint myc3 (8cb3855574298d61130294ea5d596525099d906106bbb7be7ce427dc1ab5dcd1):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8081 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).
[root@localhost tmp]# curl http://localhost:8081
curl: (7) Failed connect to localhost:8081; 拒绝连接

原因:

docker服务启动时定义的自定义链DOCKER由于某种原因被清掉
重启docker服务及可重新生成自定义链DOCKER

[root@localhost tmp]# systemctl restart docker

 

posted @ 2019-01-19 17:19 xtjatswc 阅读( ...) 评论( ...) 编辑 收藏
### 解决同一 Docker 镜像启动多个容器的问题 当使用同一个 Docker 镜像尝试启动多个容器,可能会遇到一些特定的错误。以下是常见问题及其对应的解决方案: #### 1. 端口冲突 如果多个容器试图绑定相同的主机端口,则会引发端口冲突。 - **症状**: 启动容器提示 `bind: address already in use` 类似的错误消息。 - **解决方案**: 使用不同的宿主机端口号映射到容器内部相同的服务端口。例如,在命令行中指定不同外部端口: ```bash docker run -d -p 8082:80 myimage ``` 这将把第一个容器映射到本地机器上的8081端口,第二个则映射至8082[^1]. #### 2. 数据卷竞争 当两个更多容器共享同一个数据卷并同写入可能导致数据损坏其他异常行为. - **症状**: 文件被意外覆盖者丢失. - **解决方案**: 创建独立的数据卷供各个实例单独使用;也可以考虑采用只读模式挂载静态资源以减少潜在风险. ```bash docker volume create vol1 docker volume create vol2 docker run -v vol1:/data ... docker run -v vol2:/data ... ``` 这样可以确保每个容器都有自己专属的空间存储数据[^3]. #### 3. 资源限制不足 对于某些应用来说,默认分配给容器CPU/内存等硬件资源可能不足以支持多份副本并发运行. - **症状**: 应用性能下降甚至崩溃重启. - **调整参数增加可用资源配额**, 如通过设置`--memory`, `--cpus`选项来提高单个容器可获得的最大计算能力. ```bash docker run --memory="512m" --cpus="1.5"... ``` 以上措施有助于缓解因资源争抢造成的不稳定状况[^4]. #### 4. 网络配置不当 不恰当的网络设定也可能阻碍多个基于同种模板创建出来的实体间正常通信. - **症状**: 容器之间无法互相访问服务. - **建议做法**: 利用自定义桥接网卡是加入统一管理下的overlay network实现安全可靠的互联架构设计. ```bash docker network create mynet docker run --network=mynet... ``` 这样做不仅能够有效隔离外界干扰还能促进内部成员间的协作效率提升.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值