一、docker build --tag stylegan3 .
bash: docker: command not found
2024/5/23 13:44:21
当你在尝试运行 docker build --tag stylegan3 .
命令时,遇到 bash: docker: command not found
错误,这意味着你的系统上没有安装Docker,或者Docker没有正确配置到你的系统环境中。以下是解决这个问题的步骤:
1. 安装Docker
对于Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
对于CentOS:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
对于Windows和MacOS:
请访问 Docker官网 下载并安装Docker Desktop。
2. 配置Docker权限(可选)
为了避免每次运行Docker命令都需要使用sudo
,你可以将当前用户添加到docker
组:
sudo usermod -aG docker $USER
然后,重新登录或重启系统以使组更改生效。
3. 验证安装
安装完成后,你可以通过以下命令验证Docker是否正确安装:
docker --version
你应该会看到类似于 Docker version 20.xx.xx, build xxxxxxx
的输出。
4. 重新运行构建命令
现在,你可以重新运行你的构建命令:
docker build --tag stylegan3 .
总结
通过上述步骤,你应该能够解决 bash: docker: command not found
错误,并成功安装和配置Docker。然后,你可以继续构建你的Docker镜像。
我是服务器选择的第一个方案,成功安装。
二、又遇问题:sudo systemctl status docker:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
当你看到 "System has not been booted with systemd as init system (PID 1). Can't operate." 和 "Failed to connect to bus: Host is down" 这样的错误信息时,通常意味着你当前的环境(例如在 Docker 容器中或某些特定的 Linux 发行版)没有使用 systemd 作为初始化系统。这种情况在一些轻量级的容器和虚拟环境中比较常见。
解决方案
1. 确认你是否在 Docker 容器中
如果你在 Docker 容器中运行这些命令,默认情况下 Docker 容器不使用 systemd。你可以通过以下方式确认:
ps -p 1 -o comm=
如果输出是 init
或 bash
等,而不是 systemd
,这就说明你的容器没有使用 systemd。
2. 使用替代命令
在没有 systemd 的环境中,你可以使用以下命令来管理 Docker:
# 启动 Docker
sudo dockerd
# 检查 Docker 服务状态
sudo service docker status
# 启动 Docker 服务
sudo service docker start
# 停止 Docker 服务
sudo service docker stop
注意,service
命令在某些 Linux 发行版上可能不可用。在这种情况下,直接运行 dockerd
来启动 Docker 守护进程。
3. 重新启动 Docker 守护进程
如果你在一个非容器化的环境中遇到这个问题,并且确认没有使用 systemd,可以尝试直接启动 Docker 守护进程:
sudo dockerd
这会直接启动 Docker 守护进程,并在当前终端窗口中显示日志输出。
4. 使用 Docker Compose
如果你在使用 Docker Compose,可以通过以下方式启动服务:
docker-compose up
这会根据 docker-compose.yml
文件启动所有定义的服务。
5. 检查 Docker 安装
确保 Docker 已正确安装。你可以通过以下命令检查 Docker 版本:
docker --version
如果 Docker 没有正确安装,参考官方文档重新安装 Docker:
总结
在没有 systemd 的环境中,你需要使用适合该环境的命令来管理 Docker 服务。直接运行 dockerd
或使用 service
命令是常见的替代方案。如果你在 Docker 容器中工作,考虑使用 Docker Compose 来管理你的服务。
三、sshd环境
如果你的系统中 PID 1 是 sshd
,这意味着你可能在一个非标准的环境中运行,如某些类型的容器或者是一个特殊配置的虚拟机,其中 sshd
直接作为初始进程运行。这不是常见的配置,通常 PID 1 应该是一个初始化系统,如 systemd
、init
或 upstart
。
解释和建议
-
非标准环境:如果
sshd
是 PID 1,这通常意味着你的会话是通过 SSH 直接进入一个特定的环境(可能是一个为特定目的配置的容器或最小化的系统)。这种环境可能不包括完整的服务管理工具或系统服务。 -
管理 Docker:在这种环境下,你不能使用
systemctl
来管理 Docker 或其他服务,因为systemctl
需要systemd
。你需要寻找其他方法来启动和管理 Docker,例如直接运行 Docker 守护进程(dockerd
)或使用其他服务管理工具。- 启动 Docker 守护进程:
这条命令会在后台启动 Docker 守护进程。注意,这种方式可能需要你手动管理日志和错误处理。sudo dockerd &
- 启动 Docker 守护进程:
-
确认 Docker 状态:由于你不能使用
systemctl
,可以尝试直接使用 Docker 命令来检查 Docker 是否运行:docker info
或者,
docker ps
这些命令应该能提供 Docker 是否正在运行的信息,以及容器的运行状态。
-
长期解决方案:如果你经常需要在这种环境中工作,可能需要考虑建立一个更标准的操作环境,其中包括一个完整的初始化系统,这样可以更容易地使用标准的系统管理工具和服务。
-
安全性和维护:运行一个以
sshd
为 PID 1 的系统可能有特定的安全和维护挑战。确保你了解这种配置的限制和潜在问题。
总之,你的当前环境有一些限制,你需要调整你的工作方式来适应这些限制。直接使用 Docker 相关命令或者其他替代方法来管理和操作 Docker 服务。
四、成功运行docker build --tag stylegan3 .
五:# Run the gen_images.py script using Docker: docker run --gpus all -it --rm --user $(id -u):$(id -g) \ -v `pwd`:/scratch --workdir /scratch -e HOME=/scratch \ stylegan3 \ python gen_images.py --outdir=out --trunc=1 --seeds=2 \ --network=https://api.ngc.nvidia.com/v2/models/nvidia/research/stylegan3/versions/1/files/stylegan3-r-afhqv2-512x512.pkl
检查 NVIDIA Docker 和 Docker 版本
确保你的 Docker 和 nvidia-docker
安装是最新的,并且已正确配置。
docker --version
nvidia-docker --version
看起来你还没有安装 nvidia-docker
。
六、安装 NVIDIA Container Toolkit
为了使用 GPU 运行 Docker 容器,你需要安装 NVIDIA Container Toolkit。以下是详细的安装步骤:
1. 设置存储库和 GPG 密钥
首先,根据你的操作系统版本设置存储库和 GPG 密钥。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
2. 安装 NVIDIA Container Toolkit
安装 NVIDIA Container Toolkit 和 Docker 依赖项。
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
3. 验证安装
确保 nvidia-docker
已正确安装。这个命令应该现在可以正常运行:
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
你应该看到类似以下的输出,显示你的 GPU 详细信息:
Tue May 23 06:49:08 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 00000000:00:1E.0 Off | 0 |
| N/A 39C P8 29W / 149W | 0MiB / 11441MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
4. 配置 Docker Daemon
确保 Docker 使用 NVIDIA 作为默认运行时。编辑 /etc/docker/daemon.json
文件,并将其内容修改为:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
然后重启 Docker 服务:
sudo systemctl restart docker
5. 运行 Docker 容器
现在,你可以尝试再次运行你的 Docker 容器命令:
docker run --gpus all -it --rm --user $(id -u):$(id -g) \
-v "$(pwd)":/scratch --workdir /scratch -e HOME=/scratch \
stylegan3 \
python gen_images.py --outdir=out --trunc=1 --seeds=2 \
--network=https://api.ngc.nvidia.com/v2/models/nvidia/research/stylegan3/versions/1/files/stylegan3-r-afhqv2-512x512.pkl
补充:故障排除
如果在上述步骤中遇到任何问题,建议检查以下几点:
-
系统是否安装了 NVIDIA 驱动:
nvidia-smi
这个命令应该能够正确显示你的 GPU 信息。
-
Docker 版本是否兼容:
确保你的 Docker 版本是最新的,并与 NVIDIA Container Toolkit 兼容。 -
重新启动系统:
有时,重新启动系统可以解决一些配置生效的问题。
通过这些步骤,你应该能够解决 nvidia-docker
未找到的问题,并成功运行带有 GPU 支持的 Docker 容器。