|
|
#### 查看容器
|
|
|
|
|
|
```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
|
|
|
```
|
|
|
|