Почему я теряю данные при перезапуске Docker? - PullRequest
2 голосов
/ 10 июня 2019

Я новичок в докере, и мне нужен совет. Я собираюсь создать свой собственный Git-репозиторий с Gitea. Создать файл Docker можно увидеть ниже. Когда я впервые запускаю файл, все в порядке. Проблема возникает, когда я перезагружаю свой компьютер или 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

1 Ответ

2 голосов
/ 10 июня 2019

Вы должны объявить одну из своих локальных папок как том , чтобы получить постоянные данные. Как в здесь, например, :

docker run -v /host/directory:/container/directory -other -options image_name command_to_run

В противном случае любые данные, записанные поверх существующего слоя изображения, по умолчанию удаляются при удалении контейнера.
Это использует объединенную файловую систему: (см. « Копание в слои 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

Вы использовали

volumes:
      #- ./gitea:/data
       - gitea:/data

Это объявляет том (вместо bind mount ) с именем "gitea", сохраненный в вашей установке Docker.

Вы можете попробовать то же самое для части БД:

volumes:
 - mysql:/var/lib/mysql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...