目錄
- 基礎信息
- 操作系統信息
- docker信息
- 安裝實例
- 安裝步驟
- 示例
- 遇到的問題
- 問題1:修改默認工作路徑啟動失敗
- 問題2 找不到對應組
基礎信息
操作系統信息
OS版本:CentOS 7 64位
內核版本:3.10.0
相關命令:
- uname -r
- cat /etc/os-release
docker信息
版本:28.1.1
安裝方式:zip包離線安裝
下載地址:https://download.docker.com/linux/static/stable/x86_64/
額外配置:修改默認工作路徑
安裝實例
安裝步驟
- 下載安裝包
- 解壓
- 創建相關路徑
- 添加環境變量
- 啟動
示例
- 把下載的安裝上傳到自己的路徑
- 解壓
cd 安裝包所在位置
tar -xvf ./docker-28.1.1.tgz
- 創建相關路徑
這一步是因為要修改docker的默認工作路徑才需要,如果不修改可以跳過這一步。這里主要有兩個需要創建的路徑,一個是修改默認工作路徑的文件,一個是默認工作路徑,我們把修改的配置文件放在:/etc/docker/daemon.json,工作路徑配置為:/mnt/data/dockerexec,可以選擇右鍵方式也可以選擇命令方式。
sudo mkdir -p /etc/docker
cd /etc/docker
sudo echo '{"data-root": "/mnt/data/dockerexec"}' > /etc/docker/daemon.json
- 在/etc/profile中添加以下內容,zip方式如果不配置這個會出現問題1。其中/home/soft/docker需要改成自己的docker安裝路徑
export PATH=$PATH:/home/soft/docker
- 啟動
1) 使用自帶dockerd 啟動
nohup dockerd &
2)可以添加docker.service,通過systemctl命令啟動
文件位置:/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
ExecStart=/home/soft/docker/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process[Install]
WantedBy=multi-user.target
遇到的問題
問題1:修改默認工作路徑啟動失敗
報錯信息
unable to configure the Docker daemon with file /etc/docker/daemon.json: merged configuration validation from file and command line flags failed: invalid userland-proxy-path: userland-proxy is enabled, but userland-proxy-path is not set
前置操作
新增daemon.json文件,配置內容{“data-root”: “/mnt/data/dockerexec”}已經新建data/dockerexec路徑,權限755
解決方法:通過臨時禁用解決上面問題
{"data-root": "/mnt/data/dockerexec","userland-proxy": false
}
問題:臨時禁用有什么風險嗎?如果不禁用應該怎么解決?
潛在風險:
- 可能導致容器端口映射功能失效,影響容器與外部網絡的通信
- 可能導致 IPv6 環境下的容器無法被外部訪問
- 在低版本內核(如 2.6.x)中,容器內部通過 Hairpin 方式訪問自己暴露的服務時,可能需要依賴 userland-proxy。如果禁用它,可能影響容器內部的網絡通信
- 在禁用 userland-proxy 時,容器可能無法接收 UDP 流量。這是因為 userland-proxy 在處理某些網絡協議(如 UDP)時具有特定作用,禁用后可能導致相關流量無法正確到達容器。
上面的問題都只是可能性,也就是說不一定會發生,但是在生產中一般不建議這么做。
問題2 找不到對應組
臨時禁用解決問題1,啟動之后發現新問題:
time="2025-06-03T10:17:47.982346236+08:00" level=info msg="Starting up"
time="2025-06-03T10:17:47.983972390+08:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
time="2025-06-03T10:17:47.984112724+08:00" level=info msg="containerd not running, starting managed containerd"
failed to start containerd: exec: "containerd": executable file not found in $PATH
原因:未添加docker到path中,類似于Windows下的環境變量中的path,沒有配置時會提示找不到路徑
解決方法:把docker路徑添加到path中
- 一次性添加
export PATH=$PATH:/home/soft/docker
- 持久化
文件:/etc/profile
添加內容:
export PATH=$PATH:/home/soft/docker
添加路徑之后第一個問題也解決了,所以可以去掉臨時禁用的配置,優先使用默認配置。