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.

371 lines
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.

#### 查看容器
```shell
docker ps -a
```
#### 通过名称转为$ID$
```shell
docker ps -aqf "name=gw-charge"
```
#### 删除容器
```shell
docker rm -f 332eba979772
```
#### 查看镜像
```shell
docker images
```
#### 停止所有$Docker$容器
```
docker stop $(docker ps -aq)
```
#### 删除镜像
```shell
docker rmi -f ms-admin
```
#### 删除标识为<none>的镜像
```shell
docker rmi 474ac8287260 a54e8f70bb55 92fe91e81b86
```
#### 删除已停止的容器
```shell
docker container prune
```
#### 删除所有容器
```shell
docker rm -f $(docker ps -a -q)
```
#### 进入容器
```shell
docker exec -it 58bb2dce0a92 /bin/bash
```
#### 排查步骤
1、在IDEA中运行正常
2、打包成$jar$,在$windows$中启动正常
##### $WINDOWS$环境下运行$jar$包
```cmd
"C:\Program Files\Java\jdk1.8.0_271\bin\java" -jar ms-admin.jar
```
3、将jar拷贝到Linux中启动正常
##### 安装JDK1.8
```shell
yum -y install java-1.8.0-openjdk.x86_64
```
##### Linux环境下运行jar包
```shell
java -jar ms-admin.jar
```
4、至此说明jar本身没有问题否则Linux环境一样会报错那么只有一种可能Dockerfile有问题
经仔细检查,发现 -Dspring.profiles.active=test 配置错误指定了test文件,应该是Dev配置文件才对
#sed 替换
```shell
sed -i 's/-Dspring.profiles.active=test/-Dspring.profiles.active=dev/g' Dockerfile
```
然后重新打包镜像:
##### 打包
```shell
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$文件】
```shell
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$
```shell
apt-get update
apt-get install iputils-ping -y
```
#### 查看宿主机$IP$
```shell
[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
```
#### 查看$Docker$的$IP$
```shell
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$
```shell
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$​容器
```sh
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$容器
```sh
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$包拷贝到容器中,然后重新启动容器
```sh
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
```