跳过导航

部署小知识点

docker 本地安装

[内网环境部署]

所需

安装脚本

#!/bin/sh
echo '解压tar包......'
tar -xvf docker.tar.gz --overwrite
echo '将docker目录移到/usr/bin目录下.....'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录.....'
cat << EOF > /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP 
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF
echo '添加文件权限.....'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件.....'
systemctl daemon-reload
echo '启动docker.....'
systemctl start docker
echo '设置开机自启.....'
systemctl enable docker.service
echo 'docker安装成功.....'
docker -v

卸载脚本

#!/bin/sh
echo '删除docker.service......'
rm -f /etc/systemd/system/docker.service
echo '删除docker文件......'
# 删除 docker
sudo rm -rf /usr/bin/docker*
# 删除 containerd
sudo rm -rf /usr/bin/containerd*
# 删除 docker 运行时 ID
sudo rm -rf /var/run/docker*
# 卸载 docker-compose
sudo rm -rf /usr/local/bin/docker-compose
sudo rm -rf /var/lib/docker*
sudo rm -rf /var/lib/containerd*
echo '重新加载配置文件'
systemctl daemon-reload
echo '卸载成功...'

docker-compose 安装

# 创建插件目录
sudo mkdir -p /usr/local/lib/docker/cli-plugins

# 下载 Docker Compose v2
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker-compose

# 或使用国内镜像加速
sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker-compose

# 添加执行权限
sudo chmod +x /usr/local/lib/docker-compose

# 验证安装
docker compose version

系统验证码错误

业务后台报错

redis报错

yzt_redis | 1:M 10 Apr 2026 05:02:12.184 # Failed opening the temp RDB file temp-1.rdb (in server root dir unknown) for saving: No such file or directory yzt_redis | 1:M 10 Apr 2026 05:02:12.184 # Error trying to save the DB, can't exit. yzt_redis | 1:M 10 Apr 2026 05:02:12.184 # Errors trying to shut down the server. Check the logs for more information. yzt_redis | 1:M 10 Apr 2026 05:02:13.090 * 1 changes in 3600 seconds. Saving... yzt_redis | 1:M 10 Apr 2026 05:02:13.091 * Background saving started by pid 996 yzt_redis | 996:C 10 Apr 2026 05:02:13.092 # Failed opening the temp RDB file temp-996.rdb (in server root dir unknown) for saving: No such file or directory yzt_redis | 1:M 10 Apr 2026 05:02:13.192 # Background saving error yzt_redis | 1:M 10 Apr 2026 05:02:19.033 * 1 changes in 3600 seconds. Saving... yzt_redis | 1:M 10 Apr 2026 05:02:19.034 * Background saving started by pid 997 yzt_redis | 997:C 10 Apr 2026 05:02:19.035 # Failed opening the temp RDB file temp-997.rdb (in server root dir unknown) for saving: No such file or directory yzt_redis | 1:M 10 Apr 2026 05:02:19.135 # Background saving error

定位到redis 本地持久化失败导致的 Failed opening the temp RDB file temp-xxx.rdb (in server root dir unknown) for saving: No such file or directory Redis 想生成 RDB 快照文件,但找不到可写的目录(甚至连目录在哪都不知道)

尝试 exec 进入容器查看

存在报错

docker exec -it bd566c85df9c /bin/bash OCI runtime exec failed: exec failed: unable to start container process: current working directory is outside of container mount namespace root -- possible container breakout detected: unknown exit status 128

本质含义是: 👉 你当前所在的宿主机目录,在容器的挂载命名空间里不存在 / 不可见 👉 Docker 出于安全原因,直接拒绝执行(防止“逃逸”)

坚持docker-compose 文件发现问题

  redis:
    image: redis:8.0
    container_name: yzt_redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      yzt-network:
        aliases:
          - redis

其中 ./redis/redis.conf:/usr/local/etc/redis/redis.conf

这里直接挂载的文件

docker-compose 这里有些版本不支持挂在 文件,需要这里更改为挂目录

修改为 - ./redis:/usr/local/etc/redis 才可以成功运行

关于node index.js 命令行后台执行

当前如果不使用 Systemctl 进行管理的话 只是用当前的终端进行运行的情况下,终端结束 后台进程也会结束

nohup node index.js > log.log 2>&1 < /dev/null &

当前只会后台运行 运行jobs 可以查看到jobs 编号

root@gwszzt01:~/app-compose/web-server# jobs 
[1]+  Running                 nohup node index.js > log.log 2>&1 &
root@gwszzt01:~/app-compose/web-server# disown
root@gwszzt01:~/app-compose/web-server# jobs 
root@gwszzt01:~/app-compose/web-server# 
root@gwszzt01:~/app-compose/web-server# 

disown 之后很明显就jobs 就无关了