怎么写公司网站的文案,赣州市微语网络科技有限公司,平顶山网站关键词优化,二手房出售介绍一些 docker 可能用到的基础命令#xff0c;并解决三个常见报错#xff1a; 权限被拒绝#xff08;Permission Denied#xff09;无法连接到 Docker 仓库#xff08;Timeout Exceeded#xff09;磁盘空间不足#xff08;No Space Left on Device#xff09; 命令以… 介绍一些 docker 可能用到的基础命令并解决三个常见报错 权限被拒绝Permission Denied无法连接到 Docker 仓库Timeout Exceeded磁盘空间不足No Space Left on Device 命令以适用于深度学习的 dl 镜像为例进行演示。 Docker 安装见《用两行命令快速搭建深度学习环境Docker/torch2.5.1cu118/命令行美化插件包含完整的 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-develdocker 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_volumeDocker 卷的名称。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 --ip0.0.0.0 --port8888 --no-browser --allow-root现在可以在主机浏览器中访问 http://localhost:8888。
停止容器
在容器终端内
使用 CtrlD 或输入 exit退出并停止容器适用于通过 docker run 启动的情况。使用 CtrlP 然后 CtrlQ仅退出容器的终端detach让容器继续在后台运行。 以上的“停止”行为适用于通过 docker run 启动的容器。如果容器是通过 docker start 启动的CtrlD 或 exit 只会退出终端而不会停止容器。通过 docker ps 可以察觉到这一点。 从主机停止容器
如果你想从主机停止正在运行的容器可以使用
docker stop container_id_or_name替换 container_id_or_name 为容器的 ID 或名称。
重新连接到已存在的容器
在使用一段时间后你可能会发现每次使用 docker run 去“运行”容器时之前所做的改变都“没有”保存。
这是因为每次运行 docker run 创建了新的容器。
要找回在容器中的更改需要重新连接到之前创建的容器。
查看所有容器
docker ps -adocker 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]
EnvironmentHTTP_PROXYhttp://localhost:7890/
EnvironmentHTTPS_PROXYhttp://localhost:7890/使用 ESC :wq 回车保存配置。 如果不熟悉 vim 的操作也可以使用直接运行将 http://localhost:7890/ 替换为你自己的代理地址 sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf /dev/null EOF
[Service]
EnvironmentHTTP_PROXYhttp://localhost:7890/
EnvironmentHTTPS_PROXYhttp://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/docker2.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