在 Docker 容器中自动安装外部驱动器的正确方法是什么?

在 Docker 容器中自动安装外部驱动器的正确方法是什么?

我想在 Raspberry Pi 上的 Docker 容器中创建个人云服务。由于 SD 卡的存储和使用寿命有限,我想在具有足够容量的外部驱动器上创建数据库。

首先,我遇到了在容器中安装的问题,可以通过创建特权容器来解决这个问题。现在我想使用autofs.service自动将驱动器安装到所需位置,但systemd没有找到。阅读了一些资料后,我发现不建议在容器中使用它。

那么如何以最简单的方式自动安装驱动器?哪种方法最好?

答案1

我认为正确的方法是在主机系统上安装外部驱动器,然后在启动时将卷映射到容器上。

我将提供一个基本示例NextCloud 容器

因此,请在主机系统上正常安装外部驱动器 - 假设您将其安装到/mnt/my-data

接下来,您需要为 NextCloud 数据创建一个目录:

$ mkdir /mnt/my-data/nc-data

然后,在运行 NextCloud 容器映像时,提供信息以将卷映射到内部 NextCloud 数据目录:

$ docker run -d \
-v /mnt/my-data/nc-data:/var/www/html \
nextcloud

如果您想要一个外部数据库,请对 MariaDB 执行相同的操作:

$ mkdir /mnt/my-data/nc-mariadb

$ docker run -d \
-v /mnt/my-data/nc-mariadb:/var/lib/mysql \
mariadb

确保数据目录的所有者和权限与正在运行的容器相匹配。

我发现最简单的方法是docker-compose生成整个容器堆栈的完整安装文件。使用上面的示例和docker-composeDocker Hub 上显示的文件,结果如下:

version: '2'

services:
  db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - /mnt/my-data/nc-mariadb:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - /mnt/my-data/nc-data:/var/www/html
    environment:
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

请注意,“卷”部分不存在,因为我们在您的主机系统上映射的是绝对路径(/mnt/my-data/nc-xxxx)而不是命名卷。

相关内容