# docker安装踩坑
## 根据官网安装`docker`
### 1. 移除可能安装的旧版本`docker`相关程序
### 2. 添加`docker`仓库

## 在`centerOS`上安装实战
> 一次具体的问题排查记录  
#### 排查启动失败原因
1. 查看服务状态
```shell
sudo systemctl status docker 
```
2. 发现关键字`Unit docker.service entered failed state.` 
3. 搜索得到提示,与防火墙有冲突  
- 找到对应的[解决方案](https://mhsj.net/240.html) , 参考该文章的第三条,修改`docker`的配置文件`/etc/docker/daemon.json`  
```shell
sudo vim /etc/docker/daemon.json
```
- 输入如下内容
```json
{
    "iptables": false
}
```
- 启动发现还是有问题,继续排查
- 还原配置文件
4. 使用`dockerd`来启动`docker`服务
- 命令
```shell
sudo dockerd
```
- 发现错误提示 `Failed to built-in GetDriver graph btrfs /var/lib/docker`
- 找到对应[解决方案](https://blog.csdn.net/qq_44930737/article/details/125524492)
- 查找系统文件系统类型
```shell
sudo parted -l
```
- 发现文件类型和该解决方案的文件类型一致`vfs`
- 修改`docker`配置文件`/etc/docker/daemon.json`
```json
{
  "storage-driver": "vfs"
}
```
- 继续尝试启动,出现新问题 `Failed to program NAT chain: INVALID_ZONE: docker`
> `failed to start daemon: Error initializing network controller: Error creating default "bridge" network: Failed to program NAT chain: INVALID_ZONE: docker`
- `network`看起来是网络相关的错误,想到之前找到的防火墙冲突解决方案,尝试修改`docker`配置文件
- 添加`"iptables": false`
```shell
"iptables": false
```
- 最终修改后的配置文件
```json
{
  "storage-driver": "vfs",
  "iptables": false
}
```
- 尝试启动`docker`服务
```shell
sudo systemctl start docker
```
- 没有让看日志,直接查看服务状态(可能启动成功了)
```shell
sudo systemctl status docker
```
- 服务成功处于运行中,开始尝试使用`docker`命令
```shell
sudo docker ps -a
```
5. 测试`docker`命令
> 查看`docker`是否能够正常启动
- 查看`docker`版本
```shell
sudo docker version
```
- 发现异常`Cannot connect to the Docker daemon at unix`
> Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 服务已经启动,但是`docker`命令无法连接到`docker`服务
- 尝试重启`docker`服务,
```shell
sudo systemctl restart docker
```
通过`tab`补全命令发现还有一个`docker.socket`服务,顺便也重启一下
```shell
sudo systemctl restart docker.socket
```
- 重启后再次查看`docker`版本
```shell
sudo docker version
```
- 没有异常输出,测试使用镜像