You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

查看容器

docker ps -a

通过名称转为ID

docker ps -aqf "name=gw-charge"

删除容器

docker rm -f 332eba979772

查看镜像

docker images

停止所有Docker容器

docker stop $(docker ps -aq)

删除镜像

docker rmi -f ms-admin

删除标识为的镜像

docker rmi 474ac8287260 a54e8f70bb55 92fe91e81b86

删除已停止的容器

docker container prune

删除所有容器

docker rm -f  $(docker ps -a -q)

进入容器

docker exec -it 58bb2dce0a92 /bin/bash

排查步骤

1、在IDEA中运行正常 2、打包成jar,在windows中启动正常

WINDOWS环境下运行jar
"C:\Program Files\Java\jdk1.8.0_271\bin\java" -jar ms-admin.jar

3、将jar拷贝到Linux中启动正常

安装JDK1.8
yum -y install java-1.8.0-openjdk.x86_64
Linux环境下运行jar包
java -jar ms-admin.jar

4、至此说明jar本身没有问题否则Linux环境一样会报错那么只有一种可能Dockerfile有问题 经仔细检查,发现 -Dspring.profiles.active=test 配置错误指定了test文件,应该是Dev配置文件才对

#sed 替换

sed -i 's/-Dspring.profiles.active=test/-Dspring.profiles.active=dev/g' Dockerfile

然后重新打包镜像:

打包
docker build -t ms-admin .

5、但事情还没有完因为SpringBoot的配置中有我使用hosts配置的DNS解析比如:ms-excel 10.10.21.20 在Linux宿主机中我们可以采用 /etc/hosts 的编辑方式创建 ms-excel 10.10.14.77 但这个配置信息不是直接在Docker容器中传递过去需要加上启动时的参数

修改宿主机的hosts文件

[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# 以下是微服务的服务器配置
172.17.0.1  ms-saas-mgr
172.17.0.1 ms-user
172.17.0.1 ms-finance
172.17.0.1 ms-wallet
172.17.0.1 ms-order
172.17.0.1 ms-admin
172.17.0.1 ms-excel
172.17.0.1 ms-station
172.17.0.1 ms-protocol-shenghong
172.17.0.1 ms-distribute
172.17.0.1 ms-monitor
172.17.0.1 ms-openapi
172.17.0.1 ms-task
172.17.0.1 ms-websocket-ocpp
172.17.0.1 ms-protocol
[root@localhost ~]# 

运行容器【使用宿主机的hosts文件】

docker run -d  --name gw-saas-mgr -p 7003:7003   -v /etc/hosts:/etc/hosts gw-saas-mgr
docker run -d  --name ms-admin -p 7011:7011   -v /etc/hosts:/etc/hosts ms-admin
docker run -d  --name ms-distribute -p 7012:7012   -v /etc/hosts:/etc/hosts ms-distribute
docker run -d  --name ms-finance -p 7014:7014   -v /etc/hosts:/etc/hosts ms-finance
docker run -d  --name ms-station -p 7020:7020   -v /etc/hosts:/etc/hosts ms-station
docker run -d  --name ms-task -p 7021:7021   -v /etc/hosts:/etc/hosts ms-task
docker run -d  --name ms-user -p 7022:7022   -v /etc/hosts:/etc/hosts ms-user
docker run -d  --name ms-websocket-ocpp -p 7025:7025   -v /etc/hosts:/etc/hosts ms-websocket-ocpp
docker run -d  --name gw-charge -p 7001:7001   -v /etc/hosts:/etc/hosts gw-charge
docker run -d  --name ms-openapi -p 7016:7016   -v /etc/hosts:/etc/hosts ms-openapi
docker run -d  --name ms-order -p 7017:7017   -v /etc/hosts:/etc/hosts ms-order
docker run -d  --name ms-protocol -p 7024:7024   -v /etc/hosts:/etc/hosts ms-protocol
docker run -d  --name ms-saas-mgr -p 7026:7026 -v /etc/hosts:/etc/hosts ms-saas-mgr

docker run -d  --name ms-manager-sass-ui -p 80:80  -v /etc/hosts:/etc/hosts ms-manager-sass-ui

安装 Ping

apt-get update
apt-get install iputils-ping -y

查看宿主机IP

[root@localhost ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:7ff:fe80:54b1  prefixlen 64  scopeid 0x20<link>
        ether 02:42:07:80:54:b1  txqueuelen 0  (Ethernet)
        RX packets 4206426  bytes 2354824710 (2.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3442306  bytes 746571948 (711.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.14.77  netmask 255.255.255.0  broadcast 10.10.14.255
        inet6 fe80::20c:29ff:fe54:1f62  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:54:1f:62  txqueuelen 1000  (Ethernet)
        RX packets 6180298  bytes 2946646464 (2.7 GiB)
        RX errors 0  dropped 84  overruns 0  frame 0
        TX packets 4710131  bytes 2571579064 (2.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 查看端口
curl 172.17.0.1:7026

查看DockerIP

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 4d2b1da162ca

# 返回值
172.17.0.3

替换Docker内部的更新源

cat <<EOF >/etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
EOF
#更新apt
apt update

#安装vim命令
apt install vim

# 网络工具
apt install iputils-ping  net-tools iproute2 -y

Docker镜像源

DockerHub 镜像仓库	镜像加地址
DockerHub 镜像加速代理	https://docker.anyhub.us.kg
						https://docker.chenby.cn
						https://dockerhub.jobcher.com
镜像使用说明				https://dockerhub.icu
Docker镜像加速站			https://docker.ckyl.me
镜像使用说明				https://docker.awsl9527.cn
镜像使用说明				https://docker.hpcloud.cloud
DaoCloud 镜像站		  https://docker.m.daocloud.io
AtomHub 可信镜像仓库平台 (只包含基础镜像共336个)	https://atomhub.openatom.cn

安装 Docker UI

docker pull docker.anyhub.us.kg/uifd/ui-for-docker

运行Docker UI

docker run -it -d --name docker-web -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock docker.io/uifd/ui-for-docker

重新启动所有Docker​容器

cat << 'EOF' > restart_container_all.sh
#!/bin/bash

# 获取所有正在运行的容器的ID
container_ids=$(docker ps -aq)

# 检查是否获取到容器ID
if [ -z "$container_ids" ]; then
    echo "没有找到正在运行的容器。"
    exit 1
fi

# 遍历容器ID并重新启动它们
for container_id in $container_ids; do
    echo "正在重新启动容器:$container_id"
    docker restart "$container_id"
done

echo "所有正在运行的容器已重新启动。"
EOF

# 给予脚本执行权限
chmod +x restart_container_all.sh

# 启动
./restart_container_all.sh

启动指定名称的Docker容器

cat << 'EOF' > restart_container_by_name.sh
#!/bin/bash

# 检查是否提供了容器名称作为参数
if [ "$#" -ne 1 ]; then
    echo "使用方法: $0 <容器名称>"
    exit 1
fi

container_name=$1

# 查找指定名称的容器ID
container_id=$(docker ps -aqf name=^/${container_name}$)

# 检查是否找到容器ID
if [ -z "$container_id" ]; then
    echo "没有找到名为 '$container_name' 的容器。"
    exit 1
fi

# 重新启动找到的容器
echo "正在重新启动容器:$container_id"
docker restart "$container_id"
echo "容器 '$container_name' 已重新启动。"
EOF

# 给予脚本执行权限
chmod +x restart_container_by_name.sh

# 执行示例
./restart_container_by_name.sh ms-task

JAR包拷贝到容器中,然后重新启动容器

cat > docker_restart_script.sh << 'EOF'
#!/bin/bash

# 检查是否提供了jar包名称作为参数
if [ "$#" -ne 1 ]; then
    echo "用法: $0 <jar包名称>"
    exit 1
fi

# 参数即jar包的完整名称
JAR_NAME=$1

# 从jar包名称中去掉后缀.jar得到容器名称
CONTAINER_NAME="${JAR_NAME%.jar}"

# 1. 在docker中查找名为 $CONTAINER_NAME 的容器
container=$(docker ps -aq --filter name=^$CONTAINER_NAME\$)

# 检查是否找到了容器
if [ -z "$container" ]; then
    echo "没有找到名为 $CONTAINER_NAME 的容器。"
    exit 1
fi

# 2. 将当前目录下的 $JAR_NAME 拷贝到容器的 /root/ 目录下
docker cp ./${JAR_NAME} $container:/root/

# 3. 重新启动找到的容器
docker restart $container

echo "容器 $CONTAINER_NAME 已重新启动,$JAR_NAME 已拷贝到 /root/ 目录。"
EOF

# 授权
chmod +x docker_restart_script.sh