如果 docker 重新启动,为什么我会丢失数据?

jer*_*_K7 5 docker

我是 docker 新手,需要一些建议。我即将用 Gitea 建立我自己的个人 git 存储库。docker compose 文件可以在下面看到。当我第一次运行文件时,一切都很好。当我重新启动计算机或 Docker 时出现问题,然后页面加载但它是空的,没有存储库,什么都没有。此外,无法使用首次安装后设置的凭据登录。重新启动后,与数据库的连接似乎丢失了。

码头工人撰写文件:

version: "2"

networks:
  gitea:
    external: false

volumes:
  gitea:
    driver: local

services:
  server:
    image: gitea/gitea:latest
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=mysql
      - DB_HOST=db:3306
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      #- ./gitea:/data
       - gitea:/data
    ports:
       - "3000:3000"
       - "222:22"
    depends_on:
      - db

  db:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    volumes:
      - ./mysql:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 8

您应该将本地文件夹之一声明为卷以获取持久数据。例如这里

docker run -v /host/directory:/container/directory -other -options image_name command_to_run
Run Code Online (Sandbox Code Playgroud)

否则,在删除容器时,默认情况下会丢弃任何写入现有图像层之上的数据。
这是使用联合文件系统:(请参阅“深入研究 Docker 层”)

https://cdn-images-1.medium.com/max/1091/1*st_fZmKOMykQGF8kZKglvA.png

对于gitea (docker),请确保您有本地 data 和 mysql 文件夹,由 Docker 映像挂载。

volumes:
 - ./data:/data
volumes:
 - ./mysql:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

你用过

volumes:
      #- ./gitea:/data
       - gitea:/data
Run Code Online (Sandbox Code Playgroud)

这将声明一个名为“ ”的卷(而不是绑定安装gitea,存储到您的 Docker 安装中。

您可以为 db 部分尝试相同的方法:

volumes:
 - mysql:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)