![在 Docker 容器中自动安装外部驱动器的正确方法是什么?](https://linux22.com/image/1207109/%E5%9C%A8%20Docker%20%E5%AE%B9%E5%99%A8%E4%B8%AD%E8%87%AA%E5%8A%A8%E5%AE%89%E8%A3%85%E5%A4%96%E9%83%A8%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我想在 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-compose
Docker 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
)而不是命名卷。