解决并发现的问题
1、docker container can ping but not curl or wget
2、container之间不能通信
准备机器
IP | 节点 | 主机名称 |
---|---|---|
192.168.0.10 | master | n1 |
192.168.0.11 | worker | n2 |
192.168.0.12 | worker | n3 |
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2 vim lsof telnet
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
service docker start
docker 配置
1、 修改配置 vim /etc/docker/daemon.json [192.168.0.10:8089自己安装的镜像私服]
{
"registry-mirrors": [
"https://pmyvcr6n.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker",
"insecure-registries": ["192.168.0.10:8089"]
}
2、修改配置 vim /lib/systemd/system/docker.service
找到 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 并注释并修改
修改示例: ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --mtu=1450
备注:1450 一般是指eth0下的网卡,根据自己的需求定制,集群环境下一定要配置,否则 docker container can ping but not curl or wget
3、 stop docker
service docker stop
4、删除虚拟网卡docker_gwbridge
ifconfig docker_gwbridge down
6、start docker
service docker start
7、删除并重置docker_gwbridge
#查看原有的网卡 一定要执行并记录 Subnet 和Gateway参数
docker network inspect docker_gwbridge
[
{
"Name": "docker_gwbridge",
"Id": "41827fa89d9f763a1b482fafa47d89108adb4dd0d4b07d7954b2cb5bf54fcd39",
"Created": "2022-07-17T18:19:32.378353487+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.enable_icc": "false",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.name": "docker_gwbridge"
},
"Labels": {}
}
]
# 查看MTU [ifconfig 一般是eth0 的mtu值]
ifconfig
# 删除
docker network rm docker_gwbridge
#重置网卡 ,注意 记得设置之前得到的Subnet [network inspect docker_gwbridge 获取]参数和正确的MTU值
docker network create
--subnet 172.18.0.0/16
--opt com.docker.network.bridge.name=docker_gwbridge
--opt com.docker.network.bridge.enable_icc=false
--opt com.docker.network.bridge.enable_ip_masquerade=true
--opt com.docker.network.driver.mtu=1450
docker_gwbridge
8、以上步骤必须在每一台机器上执行
todo 以上步骤必须在每一台机器上执行,如未执行,一下步骤不能操作
9、 出计划集群 docker swarm init join 每一台机器
docker swarm init
10、 重置 ingress network
#查看原有的网卡 一定要执行并记录 Subnet 和Gateway参数
docker network inspect ingress
# 删除
docker network rm ingress
#重新创建,根据自己的实际参数创建
docker network create --driver overlay --ingress --subnet=10.255.0.0/16 --gateway=10.255.0.1 --opt com.docker.network.driver.mtu=1450 ingress
11、 测试
#启动一个swarm service,
docker service create -td --name busybox busybox
# 观察MTU 已经和eth0一样了
12 创建自定义网络
docker network create -d overlay --opt com.docker.network.driver.mtu=1450 --attachable custom-overlay
13 docker 登录私服镜像
#域名或IP 每一台都要登录
docker login xxx.xxx.xxx.xxx
14 参考资料 docker 官网
Docker MTU issues and solutions
Use overlay networks
docker network create
关于部署方面
集群启动私服问题 要带上 --with-registry-auth 否则无法找到镜像,以下举例是stack-compose 启动
docker stack deploy --with-registry-auth -c docker-compose.yml xxx