# Docker常见问题
## 1. Docker镜像拉取失败
> 可以尝试更换镜像源
>
> 首先进入打开daemon配置文件
>
> ```sh
> #执行
> nano /etc/docker/daemon.json
> # 或者
> vim /etc/docker/daemon.json
> ```
>
> 一般是空的文件，我们可以把网上找到的镜像源粘贴到上面，格式形如
>
> ```json
> {
>   "dns": ["8.8.8.8", "8.8.4.4"],
>   "registry-mirrors": [
>     "https://docker.mirrors.sjtug.sjtu.edu.cn",
>     "https://cr.laoyou.ip-ddns.com",
>     "https://docker.1panel.live",
>     "https://image.cloudlayer.icu",
>     "https://hub.fast360.xyz",
>     "https://docker-0.unsee.tech",
>     "https://docker.1panelproxy.com",
>     "https://docker.tbedu.top",
>     "https://dockerpull.cn",
>     "https://docker.m.daocloud.io",
>     "https://hub.rat.dev",
>     "https://docker.kejilion.pro",
>     "https://docker.hlmirror.com",
>     "https://docker.imgdb.de",
>     "https://docker.melikeme.cn",
>     "https://ccr.ccs.tencentyun.com"
>   ]
> }
> ```
>
> 然后重启Docker服务即可
>
> ```sh
> sudo systemctl restart docker
> ```

## 2. Docker容器自启动

> 这里拿pgsql举例

### **方法 1：使用 `docker run` 时设置自启动**

在运行容器时，使用 `--restart` 参数指定重启策略

```
docker run --name my-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 5432:5432 \
  -v /var/lib/postgresql/data:/var/lib/postgresql/data \
  --restart unless-stopped \  # 关键参数：设置自启动策略
  -d postgres
```

### **`--restart` 可选策略**

| 策略                       | 说明                                                         |
| :------------------------- | :----------------------------------------------------------- |
| `no`                       | **默认**，容器不会自动重启                                   |
| `always`                   | **总是重启**（即使手动停止 `docker stop`，Docker 服务重启后也会自动启动） |
| `unless-stopped`           | **除非手动停止**（`docker stop` 后不会自启，其他情况如系统重启会自动恢复） |
| `on-failure[:max-retries]` | **失败时重启**（可设置最大重试次数，如 `on-failure:5`）      |

------

### **方法 2：修改已运行的容器**

如果容器已经创建，可以用 `docker update` 修改其重启策略：

```
docker update --restart unless-stopped my-postgres
```

------

### **方法 3：在 `docker-compose.yml` 中配置**

如果使用 Docker Compose，在 `services` 下添加 `restart` 字段：

```
services:
  postgres:
    image: postgres
    container_name: my-postgres
    restart: unless-stopped  # 可选 always / on-failure / no
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - /var/lib/postgresql/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
```