Docker网络模型—那些年踩过的坑

之前的一篇文章,我讲过了Docker的基本使用,今天继续讲讲Docker的四种网络,以及配置时,会遇到的坑,以及解决办法。如果对Docker的基本概念与使用感兴趣的可以看我另一篇文章 3分钟读懂docker使用icon-default.png?t=N5F7https://zhuanlan.zhihu.com/p/636860099

Docker网络模型

Docker有这四大网络模型,Docker的在不指定网络模型的情况下,默认是bridge模式。这就会容易出问题比如

场景1:安装Kafka

1.安装zookeeper

docker pull zookeeper:3.4.12  
docker run  --name zookeeper  -d  -p 2181:2181 zookeeper:3.4.12

2.安装kafka

docker pull wurstmeister/kafka:2.13-2.7.0

docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms128M" \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:2.13-2.7.0

问题:

在执行上面kafka的容器创建语句时,你就会发现一直启动失败,然后出现下面提示语:Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 。

原因:

这个提示语,就是因为docker模式的网络模式是桥接模式,不同的容器之间会有不同的ip,网上的很多教程都是直接写的127.0.0.1,如果是在linux上直接配置是可行的,但是对于docker如果创建容器不专门指定网络模式情况下,是行不通的。

解决办法:

办法1:docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}' 执行该命令,就能得到zookeeper容器的ip地址,然后使用该ip地址进行配置

办法2:在docker run命令创建容器时,使用--net=host,这样来指定其他的网络模式,来解决这个问题。

场景2:docker中的nginx配置ssl证书

1.nginx.conf文件:

server {
 #SSL 默认访问端口号为 443
 listen 443 ssl;
 #请填写绑定证书的域名
 server_name cloud.tencent.com; 
 #请填写证书文件的相对路径或绝对路径
 ssl_certificate  cloud.tencent.com_bundle.crt; 
 #请填写私钥文件的相对路径或绝对路径
 ssl_certificate_key cloud.tencent.com.key; 
 ssl_session_timeout 5m;
 #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 #请按照以下协议配置
 ssl_protocols TLSv1.2 TLSv1.3;
 ssl_prefer_server_ciphers on;
 location / {
   proxy_pass http://127.0.0.1:8080/;
 }
}

2.创建nginx容器

docker run -p 80:80 --name nginx -d nginx

问题:

你会发现,nginx启动失败,你的https请求,一直刷新不出页面。

原因:

因为docker默认是桥接模式,所以proxy_pass http://127.0.0.1:8080/; 是跳转不成功的,需要替换成linux的内网地址。docker run命令没有添加443端口,导致外部的443端口与容器的443端口没有映射关系。使得ssl证书的解析会失败。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值