Docker网段冲突、docker-compose安装等Docker常见问题汇总
Docker网段冲突、docker-compose安装等Docker常见问题汇总
一、docker 网段冲突
1. 问题产生
因为疫情的原因居家办公,发现公司的阿里云数据库,通过外网可以访问,但是在容器里面访问不到。后经排查是因为docker容器的网段和公司的网段冲突了,导致登陆不上去。
这里需要解决的问题是:docker默认网段是172.17,和公司的网段冲突的问题
2. 解决方案
方案一:不改docker网段,创建不和公司网段冲突的docker子网段
1) 创建新的网段
docker network create --driver=bridge --subnet=192.161.0.0/16 monitor_net
2)运行容器时指定上面创建的网络
docker run -it --name <容器名> ---network monitor_net <镜像名>
3)在docker-compose同样通过networks指定,形如下
1 version: '3' 2 networks: 3 monitor: 4 #使用已经存在的网络 5 external: 6 name: monitor_net 7 8 services: 9 prometheus: 10 image: prom/prometheus 11 container_name: prometheus 12 hostname: prometheus 13 privileged: true 14 restart: always 15 volumes: 16 - /usr/local/src/config/prometheus.yml:/etc/prometheus/prometheus.yml 17 - /usr/local/src/config/node_down.yml:/etc/prometheus/node_down.yml 18 ports: 19 - "9091:9090" 20 networks: 21 - monitor 22 links: 23 - alertmanager 24 - node-exporter
方案二:修改docker默认网段 (我这里采用的这种方式,比较方便,主要是不用改yml文件,再重新运行容器^_^)
1) 停止docker
systemctl stop docker
2) 删除原有网桥
ip link del docker0 down
3) vi /etc/docker/daemon.json,添加形如下内容
"bip":"192.161.20.1/24"
如果没有daemon.json文件,则新建。文件内容形如下:
1 { 2 "registry-mirrors":[ 3 "http://yxs0oar5.mirror.aliyuncs.com", 4 "http://registry.docker-cn.com", 5 "http://docker.mirrors.ustc.edu.cn", 6 "http://hub-mirror.c.163.com" 7 ], 8 "insecure-registries":[ 9 "registry.docker-cn.com", 10 "docker.mirrors.ustc.edu.cn" 11 ], 12 "bip":"192.161.20.1/24" 13 }
4) 重启docker服务
systemctl restart docker
二、docker-compose安装
1. 安装方式:使用二进制文件安装
centos系统下安装:
Linux 上我们可以从 Github 上下载它的二进制包下载到本地并发送linux下,复制到 /usr/local/bin/就可以正常使用,最新发行的版本地址:https://github.com/docker/compose/releases。
1) 运行以下命令以下载 Docker Compose 的当前稳定版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2)将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
3)创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4) 测试是否安装成功
docker-compose --version
三、退出程序/容器
1. 退出容器,而不终止容器
按Ctrl+p,后按Ctrl+q,如果按Ctrl+C会使容器内的应用进程终止,进而会使容器终止。
2. hyperf 2.0 中Ctrl+C无法退出程序的问题
hypef 2.0版本框架服务,本地执行过composer更新 后,导致程序启动后Ctrl + C 无法退出程序。
解决方案:
将composer.json中添加 "symfony/console": "5.4.11.*" 锁定版本。
执行 composer update symfony/console,即可恢复。
参考链接:https://segmentfault.com/a/1190000037753378