Docker 基础命令介绍和常见报错解决
介绍一些 docker 可能用到的基础命令,并解决三个常见报错:
- 权限被拒绝(Permission Denied)
- 无法连接到 Docker 仓库(Timeout Exceeded)
- 磁盘空间不足(No Space Left on Device)
命令以适用于深度学习的 dl 镜像为例进行演示。
Docker 安装见《用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的 Docker 安装步骤》
文章目录
- 镜像管理
- 查看本地镜像
- 拉取镜像
- 删除镜像
- 创建容器
- 挂载
- 在容器中启动 Jupyter Lab
- 停止容器
- 在容器终端内
- 从主机停止容器
- 重新连接到已存在的容器
- 查看所有容器
- 启动已停止的容器
- 重新连接到运行中的容器
- 命名容器
- 使用 `--name` 参数
- 使用容器名称的命令示例
- 复制文件
- 从主机复制文件到容器
- 从容器复制文件到主机
- 删除容器
- 删除指定的容器
- 删除所有未使用的容器
- 解决常见报错
- 报错 1:权限被拒绝(Permission Denied)
- 方法 1:使用 `sudo`
- 方法 2:将用户添加到 `docker` 用户组
- 报错 2:无法连接到 Docker 仓库(Timeout Exceeded)
- 方法一:配置镜像
- 方法二:设置 HTTP/HTTPS 代理
- 报错 3: 磁盘空间不足(No Space Left on Device)
- 更改 Docker 的数据目录
- 参考链接
镜像管理
写在前面
如果不想每次运行都使用
sudo开头,使用以下命令:sudo groupadd docker sudo usermod -aG docker $USER newgrp docker
查看本地镜像
docker images
列出本地所有的 Docker 镜像,包括仓库名、标签、镜像 ID、创建时间和大小。

拉取镜像
docker pull <image_name>:<tag>
例如:
docker pull hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
docker pull可以更新镜像,此时下载数据量较小,不严谨地类比为git pull进行理解。
删除镜像
docker rmi <image_id_or_name>
注意: 删除镜像前,确保没有容器正在使用它。
创建容器
以当前使用的命令为例:
docker run --gpus all -it hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
先来解释一下 --gpus all 和 -it 的作用:
--gpus all:允许容器使用主机的所有 GPU 资源。-it:这是两个参数的组合,-i表示“交互式”(interactive),-t表示为容器分配一个伪终端(pseudo-TTY)。-it组合使用可以获得完整的交互式终端体验。
使用
docker run --help可以查看更多参数的用法。如果在执行 Docker 命令时遇到权限问题,可以在命令前加上
sudo。
挂载
如果需要在容器内访问主机的文件,可以使用 -v 参数。
-
卷挂载
docker run --gpus all -it -v my_volume:container_path hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-develmy_volume:Docker 卷的名称。container_path:容器中的路径。
这样,保存在该路径的数据在容器删除后仍会保存在
my_volume中。 -
绑定主机目录到容器中
docker run --gpus all -it -v /home/your_username/data:/workspace/data hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel/home/your_username/data:主机上的目录路径。/workspace/data:容器内的挂载点。
在容器中启动 Jupyter Lab
如果需要在容器内启动 Jupyter Lab,并通过主机的浏览器进行访问,可以使用 -p 参数映射端口。Jupyter Lab 默认使用 8888 端口,使用以下命令:
docker run --gpus all -it -p 8888:8888 hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
-p 8888:8888将容器内的 8888 端口映射到主机的 8888 端口。
然后在容器内运行:
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root
现在可以在主机浏览器中访问 http://localhost:8888。
停止容器
在容器终端内
- 使用
Ctrl+D或输入exit:退出并停止容器(适用于通过docker run启动的情况)。 - 使用
Ctrl+P然后Ctrl+Q:仅退出容器的终端(detach),让容器继续在后台运行。
以上的“停止”行为适用于通过
docker run启动的容器。如果容器是通过docker start启动的,Ctrl+D或exit只会退出终端,而不会停止容器。通过docker ps可以察觉到这一点。
从主机停止容器
如果你想从主机停止正在运行的容器,可以使用:
docker stop <container_id_or_name>
替换 <container_id_or_name> 为容器的 ID 或名称。
重新连接到已存在的容器
在使用一段时间后,你可能会发现每次使用 docker run 去“运行”容器时,之前所做的改变都“没有”保存。
这是因为每次运行 docker run 创建了新的容器。
要找回在容器中的更改,需要重新连接到之前创建的容器。
查看所有容器
docker ps -a
docker ps:默认只显示正在运行的容器。-a:显示所有容器,包括已停止的。
启动已停止的容器
如果目标容器已停止,可以使用以下命令将其重新启动:
docker start <container_id_or_name>
替换 <container_id_or_name> 为容器的 ID 或名称。
重新连接到运行中的容器
使用 docker exec:
docker exec -it <container_id_or_name> /bin/bash
/bin/bash:在容器内启动一个 Bash Shell。- 在
docker run命令末尾也可添加/bin/bash。
在之前的命令中,我们使用了
/bin/zsh,这是因为该容器中已安装了 zsh。而在大多数容器中,默认的行为通常是/bin/bash或/bin/sh。
命名容器
有没有什么方法可以指定名称呢?每次通过 docker ps -a 复制 id 太不优雅了。
使用 --name 参数
在创建容器时,可以使用 --name 参数为容器指定一个名称。例如:
docker run --gpus all -it --name ai hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
容器被命名为 ai,以后可通过该名称管理容器,不需要记住容器的 ID。
运行 docker ps -a:

使用容器名称的命令示例
-
启动容器:
docker start ai -
停止容器:
docker stop ai -
重新连接到容器:
docker exec -it ai /bin/bash
复制文件
从主机复制文件到容器
docker cp /path/on/host <container_id_or_name>:/path/in/container
从容器复制文件到主机
docker cp <container_id_or_name>:/path/in/container /path/on/host
删除容器
删除指定的容器
如果想删除一个容器,可以使用 docker rm 命令:
docker rm <container_id_or_name>
例如,删除名为 ai 的容器:
docker rm ai
注意: 需要先停止容器才能删除。
删除所有未使用的容器
我们可以使用以下命令来删除所有处于“已退出”状态的容器:
docker container prune
这将删除所有已停止的容器(请谨慎使用,因为删除后无法恢复,适用于刚安装 Docker “不小心”创建了一堆容器)。
解决常见报错
介绍在新环境中使用 Docker 时,可能会遇到的报错。
推荐阅读,特别是报错 2。
报错 1:权限被拒绝(Permission Denied)
当运行命令:
docker ps
可能会遇到以下报错:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json”: dial unix /var/run/docker.sock: connect: permission denied
解决方法:
方法 1:使用 sudo
在 Docker 命令前加上 sudo:
sudo docker ps
方法 2:将用户添加到 docker 用户组
-
创建
docker用户组sudo groupadd docker -
将当前用户添加到
docker组sudo usermod -aG docker $USER -
重新加载用户组设置
newgrp docker -
验证
运行 Docker 命令,如果不提示权限错误(permission denied),说明配置成功。
docker ps
报错 2:无法连接到 Docker 仓库(Timeout Exceeded)
Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
原因: 由于国内网络限制,无法直接连接到 Docker Hub。
解决方法:
方法一:配置镜像
镜像参考:目前国内可用Docker镜像源汇总(截至2024年11月)
临时使用:
直接在原 <image_name>:<tag> 前增加网址,比如:
docker pull dockerpull.org/<image_name>:<tag>
快速测试可用性:
docker pull dockerpull.org/hello-world
永久使用:
运行以下命令配置文件,如果有一天突然拉(pull)不动了,说明链接挂了需要更新。
# 创建目录
sudo mkdir -p /etc/docker# 写入配置文件
sudo tee /etc/docker/daemon.json > /dev/null <<-'EOF'
{"registry-mirrors": ["https://docker.unsee.tech","https://dockerpull.org","https://docker.1panel.live","https://dockerhub.icu"]
}
EOF# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
方法二:设置 HTTP/HTTPS 代理
这一项提供给🪜科学上网的同学进行配置。对于本项目来说,所有文件都会提供网盘链接和对应的国内镜像命令。
-
创建并编辑 Docker 的系统服务配置文件
sudo mkdir -p /etc/systemd/system/docker.service.d sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf -
添加代理配置
在
http-proxy.conf文件中添加以下内容(将http://localhost:7890/替换为你自己的代理地址):[Service] Environment="HTTP_PROXY=http://localhost:7890/" Environment="HTTPS_PROXY=http://localhost:7890/"使用
ESC+:wq回车保存配置。如果不熟悉
vim的操作,也可以使用直接运行(将http://localhost:7890/替换为你自己的代理地址):sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<EOF [Service] Environment="HTTP_PROXY=http://localhost:7890/" Environment="HTTPS_PROXY=http://localhost:7890/" EOF -
重新加载配置并重启 Docker 服务
sudo systemctl daemon-reload sudo systemctl restart docker
报错 3: 磁盘空间不足(No Space Left on Device)
write /var/lib/docker/tmp/…: no space left on device
原因: Docker 默认使用 /var/lib/docker 作为数据存储目录,如果该分区空间不足,就会出现此错误。
解决方法:
更改 Docker 的数据目录
-
查看当前的磁盘空间
检查
/var/lib/docker所在分区的剩余空间:sudo df -h /var/lib/docker
2.3G 显然不够。
-
选择具有足够空间的目录
假设将 Docker 的数据目录移动到
~/Downloads下,先看看剩余空间:
显示还有 53G,绰绰有余,接着创建文件夹:
mkdir -p ~/Downloads/Docker && cd ~/Downloads/Docker && pwd
复制输出。
-
修改 Docker 的配置文件
编辑
/etc/docker/daemon.json文件(如果不存在会自动创建):sudo vim /etc/docker/daemon.json添加或修改以下内容(将
Path/to/Docker替换为你的新数据目录的绝对路径,也就是刚刚复制的输出):{ "data-root": "Path/to/Docker" }ESC+:wq保存并退出。
-
重启 Docker 服务并验证
sudo systemctl restart docker docker info -f '{{ .DockerRootDir}}'输出:

参考链接
How to Fix Docker’s No Space Left on Device Error
相关文章:
Docker 基础命令介绍和常见报错解决
介绍一些 docker 可能用到的基础命令,并解决三个常见报错: 权限被拒绝(Permission Denied)无法连接到 Docker 仓库(Timeout Exceeded)磁盘空间不足(No Space Left on Device) 命令以…...
如何轻松导出所有 WordPress URL 为纯文本格式
作为一名多年的 WordPress 使用者,我深知管理一个网站的复杂性。从迁移网站、设置重定向到整理内容结构,每一步都需要精细处理。而拥有所有 URL 的清单,不仅能让这些工作变得更加简单,还能为后续的管理提供极大的便利。其实&#…...
【进程概念精讲】
Susan,在那命运月台前面,再上车,春天开始落叶.................................................................. 文章目录 前言 一、【认识进程】 1、【进程基本概念引入】 2、【进程的描述与组织——进程控制块(PCB)与进程…...
帽子矩阵--记录
帽子矩阵 H是一个重要的统计工具,用于评估数据点对模型拟合结果的影响。通过计算帽子矩阵的对角线元素(杠杆值),我们可以识别出高杠杆点,这些点对模型的影响较大,可能需要特别关注。...
MySQL深入:B+树的演化、索引和索引结构
提示:内容是读《MySQL技术内幕:InnoDB存储引擎》,笔记摘要 文章目录 二叉查找树平衡二叉树(AVL) B树(BTree)B树(BTree)InnoDB B树索引索引结构(InnoDB B树)B树存放的数据量 二叉查找树 在二叉查找树中,左子…...
axios 实现 无感刷新方案
实现思路 首次登录前端通过接口获取到两个 token;分别是 accessToken、refreshToken; accessToken:正常请求需要传递的 token ;refreshToken:当某个请求 401 ,就可以通过 refreshToken 获取到新的 accessToken 特殊场…...
Python 三种方式实现自动化任务
在这篇文章中,我们将介绍一些用Python实现机器人过程自动化的包。机器人流程自动化(Robotic process automation,简称RPA)是指将鼠标点击和键盘按压自动化的过程,即模拟人类用户的操作。RPA用于各种应用程序࿰…...
新型创业模式:退休创业。没有工资,不用投资,有时间就干,不强制做,赚钱按贡献分。
这种“退休创业”的创业模式具有独特的吸引力和灵活性,适合那些已退休但希望继续贡献社会价值、赚取额外收入且无需承担太多责任的群体。以下是一个详细的设计思路: 模式概述 目标人群:退休人员,具有一定技能或经验,但…...
Android 项目依赖库无法找到的解决方案
目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近,我在编译一个 Android 老项目时遇到了一个问题,错误信息显示无法找到 com.gyf.immersionba…...
在Node.js中如何使用TypeScript
第一步:创建一个Node.js项目的package.json文件 npm init -y第二步:添加TypeScript、添加node.d.ts npm install typescript -D npm install types/node -D第三步:初始化一个tsconfig.json文件 npx tsc --init --rootDir src --outDir lib…...
链表两数加python
一、问题描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个…...
免费的可以薅羊毛的cloudflare反向代理教程
cloudflare-reverse-proxy 项目代码: https://github.com/EASTCATV/cloudflare-reverse-proxy 本项目是cloudflare反向代理。在cloudflare网站中新建worker,把worker.js文件中的内容复制进去即可使用。 使用方法为在任意url前面加上https://你的域名/proxy/ 即可…...
【每日刷题】Day155
【每日刷题】Day155 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 108. 单词接龙 - 力扣(LeetCode) 2. 675. 为高尔夫球比赛砍树 - 力扣(…...
EXCEL延迟退休公式
如图: A B为手工输入 C2EOMONTH(A2,B2*12) D2EOMONTH(C2,IF(C2>DATEVALUE("2025-1-1"),INT((DATEDIF(DATEVALUE("2025-1-1"),C2,"m")4)/4),0)) E2EOMONTH(A2,B2*12IF(EOMONTH(A2,B2*12)>DATEVALUE("2025-1-1"),INT(…...
开源对象存储新选择:在Docker上部署MinIO并实现远程管理
文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…...
Spring Cloud生态圈
目录 Spring Cloud生态圈 核心组件 其他组件 总结 Spring Cloud Alibaba生态圈 核心组件 其他特性 Spring Cloud生态圈 Spring Cloud生态圈是一个为微服务架构提供全方位支持的解决方案集合。它涵盖了多个关键组件和服务,旨在帮助开发者快速构建、部署和管理…...
AI视觉小车基础--4.舵机控制(云台控制)
一、实验准备 控制连接在扩展板上的舵机。如下图所示,按键KEY1为板载元器件,所以不需要外接其他设备。 二、运行代码 # Import the Raspbot library import time from Raspbot_Lib import Raspbot from ipywidgets import interact import ipywidgets a…...
【Rust中的项目管理】
Rust中的项目管理 前言Package,Crate,Module &use ,Path通过代码示例解释 Crate,Module ,use,Path创建一个package:代码组织化skin.rs 中的代码struct & enum 相对路径和绝对路径引用同…...
【原创】如何备份和还原Ubuntu系统,非常详细!!
前言 我在虚拟机装了一个xfce4的Ubuntu桌面版,外加输入法、IDEA等,我想将这个虚拟机里的系统直接搬到物理机中,那我可以省的再重新装一遍、配置xfce4桌面、修改一堆快捷键还有配置idea了,那直接说干就干。 本教程基于Ubuntu24.0…...
成都栩熙酷网络科技抖音小店是真的
近年来,随着短视频平台的崛起,抖音小店作为一种新兴的购物模式,迅速吸引了大量消费者和商家的关注。在这一潮流中,成都栩熙酷网络科技有限公司(以下简称“栩熙酷”)凭借其敏锐的市场洞察力和强大的技术实力…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
