分类 Linux 下的文章

docker版禅道16.4升级至18.6步骤

一、备份旧的禅道文件和数据库

  • 在禅道后台使用系统自带的备份功能

    手动进行备份,并记录其中的数据库备份文件的文件名,后续会用到

  • 停止16.4版容器并删除

    根据自身旧版16.4禅道的docker运行命令分析,确保旧版禅道数据都映射在了宿主机中,那么就可以直接删除旧版容器

  • 重命名映射到宿主机中的目录名

    (此步骤为避免新容器覆盖宿主机目录的保险操作,路径结合自身情况调整)

    mv /home/ubuntu/zentaopms /home/ubuntu/zentaopms_old
    mv /home/ubuntu/zentaomysql /home/ubuntu/zentaomysql_old

    左边路径为旧版禅道映射在宿主机中的目录,右边路径为重命名目录,根据自身情况进行修改

- 阅读剩余部分 -

注意:!!!

该设置会导致docker容器中网络出现各种问题,例如:容器中无法访问外部网络等,如果你了解原理和设置可以继续往下看,不过 Docker与防火墙问题 这篇文章提到了可以通过临时关闭ESLinux来避免,不过我没测试

一、分析

  1. 通过命令iptables-save查看防火墙状态:

    防火墙状态(点击查看图片)

  2. 发现docker自动在防火墙列表中添加了开放端口的规则. 所以根本就没走到ufw端口就被放行了.

那么, 如果不希望docker映射的端口对外开放怎么办呢?

- 阅读剩余部分 -

如何检查docker内部端口是否连通

  1. 使用docker容器内部命令进行检查:
    进入容器:docker exec -it <container_name> /bin/bash
    使用nc命令检查端口情况:
    nc -vz <ip_address> <port>
    例如:
    nc -vz 192.168.0.1 8080
    如果端口开放,则会出现succeeded!字样,表示端口可以连接通。
  2. 使用curl命令检查端口情况:
    curl -s -I <ip_address>:<port>
    例如:
    curl -s -I 192.168.0.1:8080
    如果端口可以连接通,则会返回相应的HTTP状态码。

docker 外部和内部网络不通,怎么排查?

  1. 确认docker容器的网络连接是否正确,比如容器可以ping通局域网内其它IP,其它IP是否可以ping通容器IP;
  2. 检查docker容器的网络配置,比如容器是否正确配置了GW,DNS,IP,是否正确指定了容器的网络模式(--net=bridge);
  3. 检查docker宿主机的网络配置,比如宿主机上是否安装了iptables,是否配置了iptables规则,iptables是否开放了端口,是否有防火墙设置等;
  4. 检查宿主机的DNS解析服务,比如是否能够正确解析域名;
  5. 检查宿主机上的网络配置,比如是否正确配置了网关,DNS,IP,是否配置了正确的网卡,是否插着网线;
  6. 检查宿主机的网络拨号,比如PPPOE,VPN等网络拨号服务是否已经拨号成功;
  7. 检查宿主机的网络设备,比如有线网卡,无线网卡,路由器,交换机是否正常工作;
  8. 检查宿主机与外部网络的连接,比如是否已经连接上外部网络,是否可以ping通外部网络;
  9. 检查宿主机与内网之间的连接,比如是否可以ping通内网服务器,是否有网络分区设置等。

如何检查docker容器是否正确配置了GW,DNS,IP?

  1. 检查docker容器的网络配置:使用docker inspect命令检查容器的网络配置,确保静态IP地址、网关、DNS服务器均已正确配置。
  2. 使用ping命令检查网络连接:使用ping命令检查docker容器的连接情况,确保能够正常连接外部网络。
  3. 使用nslookup命令检查DNS配置:使用nslookup命令检查docker容器的DNS配置,确保能够正常解析域名。
  4. 使用traceroute命令检查路由:使用traceroute命令检查docker容器的路由情况,确保能够正常到达外部网络。

docker如何检查指定容器的网络模式
可以使用docker inspect命令查看指定容器的网络模式,例如:

$ docker inspect --format '{{.HostConfig.NetworkMode}}' container_name_or_id

如何检查docker容器的路由情况?
要检查docker容器的路由情况,可以使用命令行工具docker exec。 例如,可以使用以下命令检查容器内的路由表:

docker exec -it <container_name> ip route

也可以使用以下命令检查容器内的默认网关:

docker exec -it <container_name> ip route show default

如何查看docker指定容器的运行命令?
方法一:
使用docker inspect命令:
docker inspect [OPTIONS] CONTAINER_ID
例如:
docker inspect -f '{{.Config.Cmd}}' CONTAINER_ID
方法二:
使用docker ps命令:
docker ps --no-trunc -f id=CONTAINER_ID
例如:
docker ps --no-trunc -f id=CONTAINER_ID