Docker notes
https://docs.docker.com/engine/install/ubuntu/
卸载旧版本
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
一键安装 Docker https://mp.weixin.qq.com/s/4297GjV2poUHks4wwM4KZg
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
一键安装 docker-compose https://mp.weixin.qq.com/s/ovvidS6parkgV8aPAuDHqQ
docker ps -a --format "table {{.Names}}\t{{.State}}\t{{.Status}}"
1. 下载 docker-compose#
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.38.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
2. 赋予执行权限#
sudo chmod +x /usr/local/bin/docker-compose
3. 查看版本#
docker-compose --version
在 Docker 中,导出和导入镜像可以通过以下命令完成:
导出 Docker 镜像#
要导出 Docker 镜像,可以使用 docker save
命令。该命令将镜像保存为一个 tar 文件。
docker save -o <output_file>.tar <image_name>:<tag>
示例:
docker save -o my_image.tar my_image:latest
导入 Docker 镜像#
要导入 Docker 镜像,可以使用 docker load
命令。该命令从 tar 文件中加载镜像。
docker load -i <input_file>.tar
示例:
docker load -i my_image.tar
注意事项#
- 确保在执行这些命令时,Docker 服务正在运行。
- 使用
docker images
命令可以查看当前系统中的所有镜像。 - 导出的 tar 文件可以在不同的 Docker 主机之间传输,以便于镜像的分享和备份。
如果你有任何疑问或需要进一步的帮助,请告诉我!
无法拉取Docker镜像的解决办法 https://mp.weixin.qq.com/s/LXal8PCCYHRPtFDxVmkOYw
Plainpad - 一款简洁易用的可自托管笔记应用 https://mp.weixin.qq.com/s/NrpUZ8W9Th9JaHJVIq7GKA
https://proxy.1panel.live``https://docker.1panel.top``https://docker.m.daocloud.io``https://docker.1ms.run``https://docker.ketches.cn
Docker 镜像加速地址#
https://mp.weixin.qq.com/s/rFWNprId9L0m1WyMezMFsQ
https://proxy.1panel.live
终端命令添加 Docker 镜像加速#
以下是一整条命令,一起复制到终端运行
将内容写入 /etc/docker/daemon.json 文件,root 用户可以去掉 sudo
DockerHub 国内加速镜像列表#
https://github.com/dongyubin/DockerHub
Docker镜像无法下载?不存在!#
https://mp.weixin.qq.com/s/EPiiPYdK5P3VjbrPPgAq4g
使用教程#
- 为了加速镜像拉取,使用以下命令设置 registry mirror
支持系统:Ubuntu 16.04+、Debian 8+、CentOS 7+
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://dockerpull.org",
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm",
"https://docker.5z5f.com",
"https://a.ussh.net",
"https://docker.cloudlayer.icu",
"https://hub.littlediary.cn",
"https://hub.crdz.gq",
"https://docker.unsee.tech",
"https://docker.kejilion.pro",
"https://registry.dockermirror.com",
"https://hub.rat.dev",
"https://dhub.kubesre.xyz",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://docker.rainbond.cc",
"https://hub.geekery.cn",
"https://docker.1panelproxy.com",
"https://atomhub.openatom.cn",
"https://docker.m.daocloud.io"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
复制代码#
tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://dockerpull.org",
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm",
"https://docker.5z5f.com",
"https://a.ussh.net",
"https://docker.cloudlayer.icu",
"https://hub.littlediary.cn",
"https://hub.crdz.gq",
"https://docker.unsee.tech",
"https://docker.kejilion.pro",
"https://registry.dockermirror.com",
"https://hub.rat.dev",
"https://dhub.kubesre.xyz",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://docker.rainbond.cc",
"https://hub.geekery.cn",
"https://docker.1panelproxy.com",
"https://atomhub.openatom.cn",
"https://docker.m.daocloud.io"
]
}
EOF
- 使用 DockerHub Proxy,以下以
hub.uuuadc.top
为例:可以根据列表自行替换来测试是否拉取成功
docker pull hub.uuuadc.top/library/mysql:5.7
james@LAPTOP:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a965b885f9c9 xihefeng/typecho:latest "/entrypoint.sh php …" 5 days ago Exited (255) 4 days ago 9000/tcp, 0.0.0.0:2080->80/tcp, [::]:2080->80/tcp typechoBack
4bc79c3af564 imaegoo/twikoo "docker-entrypoint.s…" 6 days ago Exited (137) 2 days ago twikoo
795f08a8057e halohub/halo:2.20 "sh -c 'java ${JVM_O…" 8 days ago Exited (1) 7 days ago halo
d14eb7c63340 mysql:8.1.0 "docker-entrypoint.s…" 8 days ago Exited (0) 7 days ago halodb
46c13f5aa463 triliumnext/notes:v0.90.8 "docker-entrypoint.s…" 4 weeks ago Exited (0) 2 days ago TriliumNext
f19596dd4458 ghcr.io/heyputer/puter:latest "docker-entrypoint.s…" 4 weeks ago Exited (1) 2 days ago puter
5550384c5e2c germannewsmaker/nexterm:latest "docker-entrypoint.s…" 4 weeks ago Exited (137) 2 days ago 0.0.0.0:6989->6989/tcp, :::6989->6989/tcp nexterm
4352071c58ce redimp/otterwiki:2 "/entrypoint.sh /usr…" 4 weeks ago Exited (0) 2 days ago otterwiki_otterwiki_1
james@LAPTOP:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
typecho_php latest 945b2a4c589c 5 days ago 471MB
ghcr.io/linuxserver/syncthing latest 4cbc2ae46a0a 5 days ago 53.7MB
nginx latest 66f8bdd3810c 11 days ago 192MB
halohub/halo 2.20 e02797e7b371 12 days ago 419MB
registry.fit2cloud.com/halo/halo 2.20 e02797e7b371 12 days ago 419MB
b3log/siyuan latest 4011564eb386 2 weeks ago 118MB
imaegoo/twikoo latest 9a779e0be89c 3 weeks ago 287MB
redimp/otterwiki 2 efe90d7213e9 6 weeks ago 421MB
triliumnext/notes v0.90.8 5000b9fb37da 7 weeks ago 875MB
mysql 9.1.0 56a8c14e1404 7 weeks ago 603MB
germannewsmaker/nexterm latest 0ae09d2e1248 2 months ago 816MB
ghcr.io/heyputer/puter latest ed1f7ef6d5b4 4 months ago 1.06GB
mysql 5.7 5107333e08a8 12 months ago 501MB
mysql 8.1.0 ae2502152260 16 months ago 574MB
php 7.4-apache 20a3732f422b 2 years ago 453MB
axboy/leanote latest e0f785ad942d 2 years ago 1.06GB
redis 6.2 7614ae9453d1 2 years ago 113MB
mzz2017/v2raya latest 998cc326cf58 3 years ago 84.9MB
mongo 4.0 e305b5d51c0a 3 years ago 430MB
xihefeng/typecho latest 40628d9ba6a1 3 years ago 91.7MB
james@LAPTOP:~$
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1panel.dev",
"https://docker.foreverlink.love",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm",
"https://docker.5z5f.com",
"https://a.ussh.net",
"https://docker.cloudlayer.icu",
"https://hub.littlediary.cn",
"https://hub.crdz.gq",
"https://docker.unsee.tech",
"https://docker.kejilion.pro",
"https://registry.dockermirror.com",
"https://hub.rat.dev",
"https://dhub.kubesre.xyz",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://docker.rainbond.cc",
"https://docker.1panelproxy.com",
"https://atomhub.openatom.cn",
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.linkedbus.com",
"https://dytt.online",
"https://func.ink",
"https://lispy.org",
"https://docker.xiaogenban1993.com"
]
}
EOF
ding@Syno:~$ sudo vim /etc/docker/daemon.json
ding@Syno:~$ sudo systemctl daemon-reload
ding@Syno:~$ sudo systemctl restart docker
Failed to restart docker.service: Unit docker.service failed to load: No such file or directory.
ding@Syno:~$
好的,我现在需要帮助用户解决在尝试重启Docker服务时遇到的错误:“Failed to restart docker.service: Unit docker.service failed to load: No such file or directory.”。根据用户提供的步骤,他们修改了daemon.json文件,然后执行了daemon-reload和restart命令,但失败了。我需要结合检索到的资料来分析可能的原因和解决方案。
首先,查看用户的问题描述,错误信息明确指出无法加载docker.service单元文件,这可能意味着该服务文件不存在或路径不正确。接下来,我需要查阅提供的搜索结果,看看是否有类似的问题和解决方法。
在文献4中,用户遇到了类似的问题,尝试启动Docker服务时提示“Unit not found”,这可能是因为Docker服务未正确安装或安装过程中出现问题。解决方案包括重新安装Docker。文献6提到,如果Docker的配置文件存在错误,或者依赖的服务未启动,也可能导致服务无法加载。此外,文献7和8详细讨论了Failed to start docker.service的错误,其中提到配置文件错误、权限问题、资源不足或残留文件可能导致服务启动失败。
文献2中的故障案例提到,当出现“Unit not found”时,可能是Docker被masked或者服务文件丢失,需要卸载后重新安装。文献7建议检查Docker的配置文件,并查看日志以获取更多信息。文献8则强调了清理旧版本残留文件和正确配置权限的重要性。
综合这些信息,用户的问题可能源于以下几个方面:
- Docker未正确安装,导致服务文件缺失。
- 修改后的daemon.json文件存在语法错误,导致服务无法启动。
- 系统中有旧版Docker残留文件干扰。
- 权限问题导致服务无法加载。
接下来,我需要根据这些可能性提出解决方案。首先,检查Docker是否安装正确,可以通过运行docker version确认。如果未安装,需要重新安装。如果已安装但服务文件丢失,可能需要重新安装Docker。然后,检查daemon.json的语法是否正确,可以使用JSON验证工具。此外,清理旧版本残留和检查权限也是必要的步骤。最后,查看日志(如journalctl -u docker.service)以获取更详细的错误信息。
需要将这些步骤整理成用户容易理解的解决方案,并引用相关的文献支持。
根据错误信息Unit docker.service failed to load: No such file or directory
,结合检索结果,可能的原因及解决方案如下:
- Docker未正确安装 如果系统中缺少
docker.service
文件,可能是Docker未正确安装或安装包损坏。可通过以下步骤验证: bash 检查Docker是否已安装 docker version 若提示未安装,需重新安装Docker。参考文献^4^6建议: bash 卸载旧版本残留(如有) sudo apt-get remove docker docker-engine docker.io containerd runc 清理残留文件 sudo rm -rf /var/lib/docker/* 重新安装Docker sudo apt-get install docker-ce docker-ce-cli containerd.io - 配置文件语法错误 修改
/etc/docker/daemon.json
时若格式错误(如JSON语法错误),会导致服务无法加载。建议: bash 检查配置文件语法 sudo cat /etc/docker/daemon.json 若不确定配置,可暂时移除配置文件 sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak 重新加载并重启服务 sudo systemctl daemon-reload sudo systemctl restart docker (参考文献^7^8) - 服务文件被masked或丢失 若Docker服务被标记为masked(禁用),需解除限制: bash sudo systemctl unmask docker.service sudo systemctl unmask docker.socket sudo systemctl start docker 若仍报错,可能需要重新生成服务文件(参考文献^2^4)。
- 查看详细日志定位问题 通过日志进一步排查: bash 查看Docker服务状态和日志 sudo journalctl -u docker.service sudo systemctl status docker
总结步骤:
- 检查Docker安装状态,必要时重装。
- 验证
daemon.json
文件语法,或暂时移除配置文件。 - 解除服务mask状态或修复服务文件。
- 查看日志定位具体错误。
若问题仍未解决,建议提供journalctl -u docker.service
的日志片段以便进一步分析^2^7^8。
ding@Syno:~$ sudo cp /volume1/nfs/docker.service /etc/systemd/system/
ding@Syno:~$ sudo systemctl daemon-reload
ding@Syno:~$
ding@Syno:~$ sudo systemctl restart docker
Failed to restart docker.service: Unit docker.socket failed to load: No such file or directory.
ding@Syno:~$ sudo cp /volume1/nfs/docker.service /lib/systemd/system/
ding@Syno:~$ sudo systemctl daemon-reload
ding@Syno:~$ sudo systemctl restart docker
Failed to restart docker.service: Unit docker.socket failed to load: No such file or directory.
ding@Syno:~$
看看这怎么解决,我以为缺少文件,我就从我的电脑复制文件过去,但也不行
根据你提供的错误信息:Failed to restart docker.service: Unit docker.socket failed to load: No such file or directory
,这表示 docker.socket
这个文件没有被正确加载或安装。
可能原因和解决方案:#
1. Docker Socket 文件缺失或未正确安装#
Docker 使用 docker.socket
来监听来自客户端的请求。你的系统中可能缺少该文件,或者 Docker 的安装不完整。你需要确保 Docker 安装是完整的,并且 docker.socket
文件存在。
首先,检查 docker.socket
是否存在:
sudo systemctl list-units --type=socket | grep docker
如果没有 docker.socket
,可以尝试重新安装 Docker。
2. 检查 Docker 是否安装完整#
你可以通过以下命令确认 Docker 是否安装完整:
sudo apt-get update
sudo apt-get install --reinstall docker-ce docker-ce-cli containerd.io
这个命令将重新安装 Docker,确保所有的服务文件都被正确安装。
3. 手动创建 Docker Socket 文件#
如果你的系统缺少 docker.socket
文件,可以手动创建一个配置文件来指向 Docker 服务。
创建一个
docker.socket
配置文件,内容如下:[Unit] Description=Docker Socket for the API Documentation=https://docs.docker.com After=network.target [Socket] ListenStream=/var/run/docker.sock Accept=no [Install] WantedBy=sockets.target
- 将这个文件保存到
/lib/systemd/system/docker.socket
(如果没有该路径可以创建)。 重新加载
systemd
并启动docker.socket
:sudo systemctl daemon-reload sudo systemctl enable docker.socket sudo systemctl start docker.socket
然后你可以尝试重新启动 Docker:
sudo systemctl restart docker
4. 确保 Docker 服务文件正确#
确保 /etc/systemd/system/docker.service
或 /lib/systemd/system/docker.service
中的 Docker 服务文件没有错误。你可以通过查看文件内容并确保其与官方的 Docker 服务文件一致,来确认服务文件没有问题。
5. 检查日志#
如果以上步骤都无效,你可以查看 Docker 的日志输出,以了解更多错误信息:
journalctl -u docker
这可能帮助你找到 Docker 启动失败的更详细原因。
总结#
- 重新安装 Docker,确保安装所有必要的文件。
- 确保
docker.socket
文件存在,并且服务能够正确启动。 - 检查日志以获取更多的错误细节。
如果问题依然没有解决,欢迎提供更多日志信息,我会进一步帮你诊断!
curl -fsSL https://get.docker.com | bash -s docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
ubuntu@10-7-50-157:~$ sudo curl -fsSL https://get.docker.com | bash -s docker
# Executing docker install script, commit: 53a22f61c0628e58e1d6680b49e82993d304b449
+ sudo -E sh -c 'apt-get -qq update >/dev/null'
+ sudo -E sh -c 'DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates curl >/dev/null'
+ sudo -E sh -c 'install -m 0755 -d /etc/apt/keyrings'
+ sudo -E sh -c 'curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o /etc/apt/keyrings/docker.asc'
+ sudo -E sh -c 'chmod a+r /etc/apt/keyrings/docker.asc'
+ sudo -E sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" > /etc/apt/sources.list.d/docker.list'
sh: 1: cannot create /etc/apt/sources.list.d/docker.list: Directory nonexistent
ubuntu@10-7-50-157:~$ docker -v
Command 'docker' not found, but can be installed with:
sudo snap install docker # version 27.5.1, or
sudo apt install docker.io # version 26.1.3-0ubuntu1~24.04.1
sudo apt install podman-docker # version 4.9.3+ds1-1ubuntu0.2
See 'snap info docker' for additional versions.
ubuntu@10-7-50-157:~$
看看这什么问题
你遇到的问题是因为系统中 /etc/apt/sources.list.d/
目录不存在,导致 Docker 安装脚本在尝试写入该目录时失败:
sh: 1: cannot create /etc/apt/sources.list.d/docker.list: Directory nonexistent
这是 异常的系统环境,因为 /etc/apt/sources.list.d/
是 Ubuntu 系统中默认应存在的目录,用于存放第三方软件源列表。
解决方案#
- 手动创建该目录:
sudo mkdir -p /etc/apt/sources.list.d
- 重新运行安装脚本:
curl -fsSL https://get.docker.com | sudo bash
注意:你之前用的是
| bash -s docker
,实际上是多余的参数,这里只需要| sudo bash
就可以了。
验证安装#
安装完成后,执行以下命令验证 Docker 是否成功安装:
docker -v
sudo docker run hello-world
如果还遇到问题,可以贴出完整输出,我继续帮你分析。
sudo apt install docker-compose
sudo pacman -S docker
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
newgrp docker # 刷新用户组
ding@Syno:~$ sudo usermod -aG docker ding
sudo: usermod: command not found
ding@Syno:~$
这怎么办
你在 Synology NAS(系统为 DSM)上运行 usermod
命令时提示 command not found
,这是 正常的,因为 Synology 的 DSM 是基于 Linux 的简化系统,默认并没有 usermod
命令,也没有完整的 passwd
工具链。
✅ 解决方案:让当前用户使用 Docker(DSM 系统)#
在 DSM 系统中,Docker 的权限是通过 DSM 的“群组”图形界面来管理的,而不是通过命令行 usermod
。请按照以下步骤操作:
✅ 方法一:通过 DSM 图形界面添加用户到 docker
群组#
- 打开 DSM 控制面板。
- 进入 “用户” > 找到你的用户(如
ding
)> 编辑。 - 切换到 “群组成员” 选项卡。
- 找到
docker
群组,勾选加入。 - 保存并退出。
- 注销当前用户再重新登录(或重启一次服务/系统)以生效。
✅ 方法二:使用 sudo
执行 Docker 命令(适合临时用)#
如果你只是偶尔用一次:
sudo docker ps
Synology 默认 sudo
可能也有限制,如果你想每次都能运行 docker 命令但不想输 sudo
,可以继续使用方法一。
✅ 方法三:安装 Entware(提供完整 Linux 工具集)#
如果你希望使用 usermod
、adduser
等标准命令,可以安装 Entware 来提供一个完整的 Linux 工具包:
# 安装 Entware(需开启 ssh 并 root)
# 然后使用 opkg 安装你需要的命令,比如:
opkg install shadow-useradd
但大多数用户 不需要安装 Entware,通过 DSM 图形界面操作群组更安全也更稳定。
🔁 最后建议#
对于 Docker 权限管理,请首选 DSM 图形界面。如果你打算长期在 DSM 上运行 Docker 容器或自动化任务,可以考虑创建一个专门用户并加入 docker 群组,或者配置 docker-compose
容器。
如果需要,我也可以帮你写 DSM 上的 Docker 启动脚本或管理方案。需要的话请告诉我你部署的容器目标。