重要说明
⚠️⚠️⚠️ 此图像由社区志愿者维护,专为专家使用而设计。如需快速简便地部署并支持 Nextcloud Hub 的全套功能,请使用由 Nextcloud GmbH 维护的 Nextcloud 一体化 Docker 容器。
快速参考
-
由……维护: (注:原文中“Maintained by:”后面应该还有具体的维护者信息,但题目中未给出,所以翻译只能到此为止。)
Nextcloud 社区 -
哪里可以获得帮助:
Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow
支持的标签及各自的 Dockerfile 链接
-
29.0.7-fpm-alpine,29.0-fpm-alpine,29-fpm-alpine,stable-fpm-alpine,production-fpm-alpine -
30.0.0-apache,30.0-apache,30-apache,apache,30.0.0,30.0,30,latest -
30.0.0-fpm-alpine,30.0-fpm-alpine,30-fpm-alpine,fpm-alpine
快速参考(续)
-
支持的架构:(更多信息)
amd64,arm32v5,arm32v6,arm32v7,arm64v8,i386,mips64le,ppc64le,riscv64,s390x -
已发布的图像伪影细节:
repo-info repo 的repos/nextcloud/目录(历史记录)
(图像元数据、传输大小等) -
图像更新:
官方图像仓库的library/nextcloud标签
官方图像存储库的library/nextcloud文件(历史记录) -
此描述的来源:
文档库的nextcloud/目录(历史记录)
什么是 Nextcloud?
您所有数据的安全家园。按照您的方式,从任何设备访问并共享您的文件、日历、联系人、邮件等更多内容。
此 Docker 微服务镜像由 Nextcloud 社区开发和维护。Nextcloud GmbH 不为该 Docker 镜像提供支持。如果您希望获得专业支持,可以成为企业客户或使用 AIO。
如何使用此图像
此图像设计用于微服务环境中。您可以从两个版本的图像中进行选择。
apache 标签包含一个完整的 Nextcloud 安装程序,包括一个 apache 网络服务器。它的设计易于使用,能让您快速运行起来。这也是 latest 标签以及未进一步指定的版本标签的默认情况。
第二种选择是一个 fpm 容器。它基于 php-fpm 镜像,并运行一个为您的 Nextcloud 页面提供服务的 fastCGI 进程。要使用此镜像,必须将其与任何可以将 HTTP 请求代理到容器的 FastCGI 端口的 Web 服务器结合使用。
使用 apache 图像
阿帕奇镜像包含一个网络服务器并暴露 80 端口。要启动容器,请输入:
$ docker run -d -p 8080:80 nextcloud
现在您可以从您的主机系统通过 http://localhost:8080/ 访问 Nextcloud 。
使用 fpm 镜像
要使用 fpm 镜像,您需要一个额外的 Web 服务器,例如 nginx,它可以将 http 请求代理到容器的 fpm 端口。对于 fpm 连接,此容器暴露端口 9000。在大多数情况下,您可能希望使用另一个容器或您的主机作为代理。如果使用主机,则可以直接在端口 9000 上访问 Nextcloud 容器。如果使用另一个容器,请确保将它们添加到相同的 Docker 网络中(通过 docker run --network <NAME> ... 或 docker-compose 文件)。在这两种情况下,您都不想将 fpm 端口映射到您的主机。
$ docker run -d nextcloud:fpm
由于 fastCGI 进程无法提供静态文件(样式表、图像等)服务,因此 Web 服务器需要能够访问这些文件。这可以通过 volumes-from 选项实现。您可以在 docker-compose 部分找到更多信息。
使用外部数据库
默认情况下,此容器使用 SQLite 进行数据存储,但 Nextcloud 安装向导(首次运行时出现)允许连接到现有的 MySQL/MariaDB 或 PostgreSQL 数据库。您还可以链接一个数据库容器,例如 --link my-mysql:mysql ,然后在设置时将 mysql 用作数据库主机。更多信息在 docker-compose 部分。
持久数据
Nextcloud 安装以及数据库中存储内容之外的所有数据(文件上传等)都存储在未命名的 Docker 卷 volume /var/www/html 中。Docker 守护进程会将该数据存储在 Docker 目录 /var/lib/docker/volumes/... 内。这意味着即使容器崩溃、停止或被删除,您的数据也会得到保存。
应使用指定的 Docker 卷或挂载的主机目录进行升级和备份。要实现此目的,您的数据库容器需要一个卷,Nextcloud 需要一个卷。
Nextcloud:
-
/var/www/html/所有 Nextcloud 数据所在的文件夹$ docker run -d \ -v nextcloud:/var/www/html \ nextcloud
数据库:
/var/lib/mysqlMySQL / MariaDB 数据-
/var/lib/postgresql/dataPostgreSQL 数据$ docker run -d \ -v db:/var/lib/mysql \ mariadb:10.6
附加卷
如果您想要对您的各个文件进行细粒度访问,可以为数据、配置、您的主题和自定义应用程序挂载额外的卷。 data 、 config 文件分别存储在 /var/www/html/ 内的相应子文件夹中。应用程序分为核心 apps (随 Nextcloud 一起提供,您无需操心)和 custom_apps 文件夹。如果您使用自定义主题,它将放入 themes 子文件夹中。
可作为卷挂载的文件夹概述:
/var/www/html主文件夹,更新所需/var/www/html/custom_apps已安装/已修改的应用程序/var/www/html/config本地配置/var/www/html/data您的 Nextcloud 的实际数据/var/www/html/themes/<YOUR_CUSTOM_THEME>主题设计/品牌推广
如果您想为所有这些使用命名卷,它看起来会是这样:
$ docker run -d \
-v nextcloud:/var/www/html \
-v apps:/var/www/html/custom_apps \
-v config:/var/www/html/config \
-v data:/var/www/html/data \
-v theme:/var/www/html/themes/<YOUR_CUSTOM_THEME> \
nextcloud
定制卷(或:自定义卷)
如果在 /var/www/html 下挂载额外的卷,您应该考虑:
- 确认 upgrade.exclude 包含在安装和升级过程中应保留的文件和文件夹;或者
- 将存储卷挂载到
/var/www/html之外的位置。
您应该注意,在安装和升级过程中,主文件夹(
/var/www/html)内的数据将被覆盖/删除,除非在 upgrade.exclude 中列出。官方支持的其他卷已在该列表中,但自定义卷需要您自行添加。我们建议将自定义存储卷挂载在/var/www/html之外,并且如果可能的话设置为只读,这样就无需进行此调整。但是,如果您必须这样做,则可以使用修改后的/upgrade.exclude文件构建自定义映像,该文件包含您的自定义卷。
使用 Nextcloud 命令行界面
要使用 Nextcloud 命令行界面(又名 occ 命令):
$ docker exec --user www-data CONTAINER_ID php occ
或对于 docker-compose:
$ docker-compose exec --user www-data app php occ
通过环境变量进行自动配置
Nextcloud 镜像支持通过环境变量进行自动配置。您可以在首次运行时在安装页面上预先配置所有被询问的内容。要启用自动配置,请通过以下环境变量设置您的数据库连接。您必须为给定的数据库指定所有环境变量,否则数据库环境变量默认为 SQLITE。仅使用一种数据库类型!
SQLite:
SQLITE_DATABASE使用 sqlite 的数据库名称
MySQL / MariaDB:
MYSQL_DATABASE使用 mysql / mariadb 的数据库名称。MYSQL_USER使用 mysql / mariadb 时数据库的用户名。MYSQL_PASSWORD使用 mysql / mariadb 时数据库用户的密码。MYSQL_HOST使用 mysql / mariadb 的数据库服务器的主机名。
PostgreSQL:
POSTGRES_DB使用 postgres 的数据库名称。POSTGRES_USER使用 postgres 的数据库用户名。POSTGRES_PASSWORD使用 postgres 的数据库用户的密码。POSTGRES_HOST使用 postgres 的数据库服务器的主机名。
作为通过环境变量传递敏感信息的替代方法,可将 _FILE 附加到前面列出的环境变量上,这会导致初始化脚本从容器中存在的文件加载这些变量的值。请参阅下面的 Docker 机密部分。
如果您设置了任何一组值(即 MYSQL_DATABASE 、 MYSQL_USER 、 MYSQL_PASSWORD 、 MYSQL_HOST 中的所有值),则在首次运行时的安装页面中不会询问这些值。通过为您的数据库类型使用所有变量进行完整配置,您还可以通过设置管理员用户和密码来配置您的 Nextcloud 实例(仅在您同时设置两者时才有效):
NEXTCLOUD_ADMIN_USERNextcloud 管理员用户的名称。NEXTCLOUD_ADMIN_PASSWORDNextcloud 管理员用户的密码。
如果您愿意,您可以设置数据目录,否则将使用默认值。
NEXTCLOUD_DATA_DIR(默认值:/var/www/html/data)配置数据目录,Nextcloud 在此目录中存储来自用户的所有文件。
也可以通过环境变量设置一个或多个受信任的域。它们将在安装后添加到配置中。
NEXTCLOUD_TRUSTED_DOMAINS(默认未设置)可选的以空格分隔的域名列表
安装和更新脚本仅在使用默认命令( apache-foreground 或 php-fpm )时触发。如果您使用自定义命令,则必须启用安装/更新功能并使用
NEXTCLOUD_UPDATE(默认:0)
您可能需要确保在每次容器更新后,.htaccess 是最新的。特别是在多个 swarm 节点上,因为任何差异都会使您的服务器无法使用。
NEXTCLOUD_INIT_HTACCESS(默认未设置)将其设置为 true 以在容器初始化后启用运行occ maintenance:update:htaccess。
If you want to use Redis you have to create a separate Redis container in your setup / in your docker-compose file. To inform Nextcloud about the Redis container, pass in the following parameters:
REDIS_HOST(默认未设置)Redis 容器的名称REDIS_HOST_PORT(default:6379) Optional port for Redis, only use for external Redis servers that run on non-standard ports.REDIS_HOST_PASSWORD(默认未设置)Redis 密码
建议使用 Redis 来防止文件锁定问题。查看示例以获取进一步的说明。
若要使用外部 SMTP 服务器,您必须提供连接详细信息。要将 Nextcloud 配置为使用 SMTP,请添加:
SMTP_HOST(默认未设置):SMTP 服务器的主机名。SMTP_SECURE(默认情况下为空):设置为ssl以使用 SSL,或设置为tls以使用 STARTTLS。SMTP_PORT(默认:对于 SSL 为465,对于非安全连接为25):SMTP 连接的可选端口。使用587作为 STARTTLS 的替代端口。SMTP_AUTHTYPE(默认:LOGIN):用于身份验证的方法。如果不需要身份验证,则使用PLAIN。SMTP_NAME(默认情况下为空):用于身份验证的用户名。SMTP_PASSWORD(默认情况下为空):用于身份验证的密码。MAIL_FROM_ADDRESS(默认未设置):为 Nextcloud 发送的电子邮件中“发件人”字段设置本地部分。MAIL_DOMAIN(默认未设置):为电子邮件设置一个与 Nextcloud 安装的域不同的域。
至少必须设置 SMTP_HOST 、 MAIL_FROM_ADDRESS 和 MAIL_DOMAIN ,配置才能应用。
查阅 Nextcloud 文档以了解配置 SMTP 的其他值。
若要使用外部与 S3 兼容的对象存储作为主要存储,请设置以下变量:
OBJECTSTORE_S3_BUCKET:Nextcloud 应在其中存储数据的存储桶的名称OBJECTSTORE_S3_REGION:S3 存储桶所在的区域OBJECTSTORE_S3_HOST:对象存储服务器的主机名OBJECTSTORE_S3_PORT:对象存储服务器所通过的端口OBJECTSTORE_S3_KEY:AWS 风格的访问密钥OBJECTSTORE_S3_SECRET:AWS 风格的秘密访问密钥OBJECTSTORE_S3_STORAGE_CLASS:将对象添加到存储桶时要使用的存储类OBJECTSTORE_S3_SSL(默认:true):是否应使用 SSL/TLS 与对象存储服务器进行通信OBJECTSTORE_S3_USEPATH_STYLE(默认:false):对于 AWS S3 不是必需的OBJECTSTORE_S3_LEGACYAUTH(默认:false):对于 AWS S3 不是必需的OBJECTSTORE_S3_OBJECT_PREFIX(默认:urn:oid:):添加到文件 ID 前面的前缀OBJECTSTORE_S3_AUTOCREATE(默认:true):若容器不存在,则创建该容器OBJECTSTORE_S3_SSE_C_KEY(默认未设置):用于服务器端加密(SSE-C)的 Base64 编码密钥,最大长度为 32 字节
查阅 Nextcloud 文档以获取更多信息。
若要将外部 OpenStack Swift 对象存储用作主要存储,请设置以下变量:
OBJECTSTORE_SWIFT_URL:Swift 身份(Keystone)端点OBJECTSTORE_SWIFT_AUTOCREATE(默认:false):Nextcloud 是否应自动创建 Swift 容器OBJECTSTORE_SWIFT_USER_NAME:Swift 用户名OBJECTSTORE_SWIFT_USER_PASSWORD:Swift 用户密码OBJECTSTORE_SWIFT_USER_DOMAIN(默认:Default):Swift 用户域OBJECTSTORE_SWIFT_PROJECT_NAME:OpenStack 项目名称OBJECTSTORE_SWIFT_PROJECT_DOMAIN(默认:Default):OpenStack 项目域OBJECTSTORE_SWIFT_SERVICE_NAME(默认:swift):Swift 服务名称OBJECTSTORE_SWIFT_REGION:Swift 端点区域OBJECTSTORE_SWIFT_CONTAINER_NAME:Nextcloud 应将数据存储其中的 Swift 容器(桶)
查阅 Nextcloud 文档以获取更多信息。
要自定义其他 PHP 限制,您可以简单地更改以下变量:
PHP_MEMORY_LIMIT(默认512M)此设置脚本允许分配的以字节为单位的最大内存量。这旨在帮助防止编写不佳的脚本占用所有可用内存,但如果设置得太紧,可能会妨碍正常操作。PHP_UPLOAD_LIMIT(默认512M)此操作设置大文件的上传限制(post_max_size和upload_max_filesize)。请注意,您可能需要根据您的客户端、网络服务器或操作系统更改其他限制。有关更多信息,请查看 Nextcloud 文档。
要自定义 Apache 最大文件上传限制,您可以更改以下变量:
APACHE_BODY_LIMIT(默认1073741824[1GiB])这限制了从客户端发送的 HTTP 请求体的总大小。它指定了请求体中允许的字节数。值为 0 表示无限制。有关更多信息,请查看 Nextcloud 文档。
通过挂钩文件夹进行自动配置
有 5 个钩子
pre-installation在 Nextcloud 安装/初始化之前执行post-installation在 Nextcloud 安装/启动后执行pre-upgrade在 Nextcloud 升级之前执行post-upgrade在 Nextcloud 升级后执行before-starting在 Nextcloud 启动前执行
要使用由 entrypoint 脚本触发的钩子,要么
- 将您的脚本添加到位于容器中路径
/docker-entrypoint-hooks.d的钩子文件夹的各个文件夹中 - 如果您想在容器内使用来自主机系统的脚本,请使用卷,参见示例。
注意:只有位于钩子文件夹(非子文件夹)中、以 .sh 结尾且标记为可执行的脚本才会被执行。
示例:使用卷进行挂载
...
app:
image: nextcloud:stable
volumes:
- ./app-hooks/pre-installation:/docker-entrypoint-hooks.d/pre-installation
- ./app-hooks/post-installation:/docker-entrypoint-hooks.d/post-installation
- ./app-hooks/pre-upgrade:/docker-entrypoint-hooks.d/pre-upgrade
- ./app-hooks/post-upgrade:/docker-entrypoint-hooks.d/post-upgrade
- ./app-hooks/before-starting:/docker-entrypoint-hooks.d/before-starting
...
在反向代理后面使用 apache 图像并自动配置服务器主机和协议
默认情况下,如果请求来自 10.0.0.0/8 、 172.16.0.0/12 或 192.168.0.0/16 中的代理,apache 图像将使用 X-Real-IP 中的 IP 地址替换远程地址(Nextcloud 可见的 IP 地址)。如果您希望 Nextcloud 从受信任的代理中获取服务器主机( HTTP_X_FORWARDED_HOST )、协议( HTTP_X_FORWARDED_PROTO )和客户端 IP( HTTP_X_FORWARDED_FOR ),则禁用重写 IP 并将反向代理的 IP 地址添加到 TRUSTED_PROXIES 中。
APACHE_DISABLE_REWRITE_IP(默认未设置):设置为 1 以禁用重写 IP。TRUSTED_PROXIES(默认情况下为空):以空格分隔的受信任代理列表。IPv4 支持 CIDR 表示法。
如果 TRUSTED_PROXIES 方法对您不起作用,请尝试使用固定值作为覆盖参数。
OVERWRITEHOST(默认情况下为空):设置代理的主机名。也可以指定一个端口。OVERWRITEPROTOCOL(默认情况下为空):设置代理的协议,http 或 https。OVERWRITECLIURL(默认情况下为空):设置代理的 cli url(例如 https://mydnsname.example.com)OVERWRITEWEBROOT(默认情况下为空):设置代理的绝对路径。OVERWRITECONDADDR(默认情况下为空):用于根据远程地址覆盖值的正则表达式。
查看 Nextcloud 文档以获取更多详细信息。
请记住,一旦设置,由于 Nextcloud 合并配置文件的方式,删除这些环境变量并不会从配置文件中删除这些值。
使用 docker-compose 运行此镜像
获得功能齐全且可正常运行的设置的最简单方法是使用 docker-compose 文件。设置系统有太多不同的可能性,因此这里仅提供一些您需要注意的示例。
首先,确保您已选择正确的基础镜像(fpm 或 apache)并添加了您想要的功能(见下文)。在任何情况下,您都需要添加一个数据库容器和 Docker 卷,以便轻松访问您的持久数据。如果您希望您的服务器可以从互联网访问,添加 HTTPS 加密是必须的!更多信息见下文。
基础版本 - apache
此版本将使用 apache 镜像并添加一个 mariaDB 容器。卷设置为保持您的数据持久性。此设置未提供 ssl 加密,旨在在代理后面运行。
在运行此设置之前,请确保为 MYSQL_ROOT_PASSWORD 和 MYSQL_PASSWORD 变量传入值。
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/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:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
然后运行 docker-compose up -d ,现在您可以从您的主机系统在 http://localhost:8080/ 访问 Nextcloud 。
Base version - FPM
When using the FPM image, you need another container that acts as web server on port 80 and proxies the requests to the Nextcloud container. In this example a simple nginx container is combined with the Nextcloud-fpm image and a MariaDB database container. The data is stored in docker volumes. The nginx container also needs access to static files from your Nextcloud installation. It gets access to all the volumes mounted to Nextcloud via the volumes_from option. The configuration for nginx is stored in the configuration file nginx.conf, that is mounted into the container. An example can be found in the examples section here.
由于此设置不包含加密,因此应在代理服务器后面运行。
在运行此设置之前,请确保为 MYSQL_ROOT_PASSWORD 和 MYSQL_PASSWORD 变量传入值。
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud:fpm
restart: always
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
web:
image: nginx
restart: always
ports:
- 8080:80
links:
- app
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
volumes_from:
- app
然后运行 docker-compose up -d ,现在您可以从您的主机系统在 http://localhost:8080/ 访问 Nextcloud 。
Docker 机密信息
作为通过环境变量传递敏感信息的替代方法,可将 _FILE 附加到先前列出的环境变量上,从而使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 机密中加载密码。例如:
version: '3.2'
services:
db:
image: postgres
restart: always
volumes:
- db:/var/lib/postgresql/data
environment:
- POSTGRES_DB_FILE=/run/secrets/postgres_db
- POSTGRES_USER_FILE=/run/secrets/postgres_user
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
secrets:
- postgres_db
- postgres_password
- postgres_user
app:
image: nextcloud
restart: always
ports:
- 8080:80
volumes:
- nextcloud:/var/www/html
environment:
- POSTGRES_HOST=db
- POSTGRES_DB_FILE=/run/secrets/postgres_db
- POSTGRES_USER_FILE=/run/secrets/postgres_user
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
- NEXTCLOUD_ADMIN_PASSWORD_FILE=/run/secrets/nextcloud_admin_password
- NEXTCLOUD_ADMIN_USER_FILE=/run/secrets/nextcloud_admin_user
depends_on:
- db
secrets:
- nextcloud_admin_password
- nextcloud_admin_user
- postgres_db
- postgres_password
- postgres_user
volumes:
db:
nextcloud:
secrets:
nextcloud_admin_password:
file: ./nextcloud_admin_password.txt # put admin password in this file
nextcloud_admin_user:
file: ./nextcloud_admin_user.txt # put admin username in this file
postgres_db:
file: ./postgres_db.txt # put postgresql db name in this file
postgres_password:
file: ./postgres_password.txt # put postgresql password in this file
postgres_user:
file: ./postgres_user.txt # put postgresql username in this file
目前,这仅支持 NEXTCLOUD_ADMIN_PASSWORD 、 NEXTCLOUD_ADMIN_USER 、 MYSQL_DATABASE 、 MYSQL_PASSWORD 、 MYSQL_USER 、 POSTGRES_DB 、 POSTGRES_PASSWORD 、 POSTGRES_USER 、 REDIS_HOST_PASSWORD 、 SMTP_PASSWORD 、 OBJECTSTORE_S3_KEY 和 OBJECTSTORE_S3_SECRET 。
如果您设置了任何一组值(即 MYSQL_DATABASE_FILE 、 MYSQL_USER_FILE 、 MYSQL_PASSWORD_FILE 、 MYSQL_HOST 中的所有值),脚本将不会使用相应的一组环境变量( MYSQL_DATABASE 、 MYSQL_USER 、 MYSQL_PASSWORD 、 MYSQL_HOST )。
使您的 Nextcloud 可从互联网访问
至此,您的 Nextcloud 仅可从您的 Docker 主机访问。如果您希望您的 Nextcloud 可从互联网访问,则必须添加 SSL 加密。
HTTPS - SSL 加密
根据您的设置,引入加密有许多不同的可能性。
We recommend using a reverse proxy in front of your Nextcloud installation. Your Nextcloud will only be reachable through the proxy, which encrypts all traffic to the clients. You can mount your manually generated certificates to the proxy or use a fully automated solution which generates and renews the certificates for you.
In our examples section we have an example for a fully automated setup using a reverse proxy, a container for Let's Encrypt certificate handling, database and Nextcloud. It uses the popular nginx-proxy and docker-letsencrypt-nginx-proxy-companion containers. Please check the according documentations before using this setup.
首次使用
When you first access your Nextcloud, the setup wizard will appear and ask you to choose an administrator account username, password and the database connection. For the database use db as host and nextcloud as table and user name. Also enter the password you chose in your docker-compose.yml file.
更新到较新的版本
Updating the Nextcloud container is done by pulling the new image, throwing away the old container and starting the new one.
It is only possible to upgrade one major version at a time. For example, if you want to upgrade from version 14 to 16, you will have to upgrade from version 14 to 15, then from 15 to 16.
Since all data is stored in volumes, nothing gets lost. The startup script will check for the version in your volume and the installed docker version. If it finds a mismatch, it automatically starts the upgrade process. Don't forget to add all the volumes to your new container, so it works as expected.
$ docker pull nextcloud
$ docker stop <your_nextcloud_container>
$ docker rm <your_nextcloud_container>
$ docker run <OPTIONS> -d nextcloud
请注意,您必须使用最初启动 Nextcloud 时使用的选项运行相同的命令。这包括卷、端口映射。
使用 docker-compose 时,您的撰写文件会处理您的配置,因此您只需运行:
$ docker-compose pull
$ docker-compose up -d
添加功能
许多人希望在他们的 Nextcloud 安装中使用额外的功能。如果映像中不包含您需要的软件包,您可以轻松地在此基础上构建自己的映像。使用 FROM 语句启动您的派生映像,并添加您喜欢的任何内容。
FROM nextcloud:apache
RUN ...
示例文件夹提供了一些关于如何添加某些功能的示例,例如包括 cron 作业、smb 支持或 imap 身份验证。
如果您使用自己的 Dockerfile,则需要相应地配置您的 docker-compose 文件。将 image 选项替换为 build 。您必须指定您的 Dockerfile 的路径。(在示例中,它与 docker-compose 文件在同一目录中)
app:
build: .
restart: always
links:
- db
volumes:
- data:/var/www/html/data
- config:/var/www/html/config
- apps:/var/www/html/apps
如果您打算使用另一个命令来运行映像,请确保在您的 Dockerfile 中设置 NEXTCLOUD_UPDATE=1 。否则,安装和更新将无法正常工作。
FROM nextcloud:apache
...
ENV NEXTCLOUD_UPDATE=1
CMD ["/usr/bin/supervisord"]
更新您自己的派生镜像也非常简单。当有新的 Nextcloud 镜像版本可用时,运行:
docker build -t your-name --pull .
docker run -d your-name
或对于 docker-compose:
docker-compose build --pull
docker-compose up -d
--pull 选项告诉 Docker 去寻找基础镜像的新版本。然后,您的 Dockerfile 内部的构建指令会在新镜像之上运行。
迁移现有安装
您已经在使用 Nextcloud 并想要切换到 Docker 吗?太好了!这里有一些需要注意的事项:
-
在一个
docker-compose文件中定义您的整个 Nextcloud 基础设施,并使用docker-compose up -d运行它,以获得基础安装、卷和数据库。从那里开始工作。 -
从 mysqldump 恢复您的数据库(nextcloud_db_1 是您的数据库容器的名称)
-
要从 MySQL 转储文件中导入,请使用以下命令
docker cp ./database.dmp nextcloud_db_1:/dmp docker-compose exec db sh -c "mysql --user USER --password PASSWORD nextcloud < /dmp" docker-compose exec db rm /dmp -
要从 PostgreSQL 转储中导入,请使用以下命令
docker cp ./database.dmp nextcloud_db_1:/dmp docker-compose exec db sh -c "psql -U USER --set ON_ERROR_STOP=on nextcloud < /dmp" docker-compose exec db rm /dmp
-
-
编辑您的 config.php
-
设置数据库连接
-
在 MySQL 数据库的情况下
'dbhost' => 'db:3306', -
在 PostgreSQL 数据库的情况下
'dbhost' => 'db:5432',
-
-
确保您没有针对
apps_paths的配置。删除类似这样的行。'apps_paths' => array ( 0 => array ( 'path' => OC::$SERVERROOT.'/apps', 'url' => '/apps', 'writable' => true, ), ), -
确保
apps目录不可写,custom_apps目录可写'apps_paths' => array ( 0 => array ( 'path' => '/var/www/html/apps', 'url' => '/apps', 'writable' => false, ), 1 => array ( 'path' => '/var/www/html/custom_apps', 'url' => '/custom_apps', 'writable' => true, ), ), -
确保您的数据目录设置为 /var/www/html/data
'datadirectory' => '/var/www/html/data',
-
-
复制您的数据(nextcloud_app_1 是您的 Nextcloud 容器的名称):
docker cp ./data/ nextcloud_app_1:/var/www/html/ docker-compose exec app chown -R www-data:www-data /var/www/html/data docker cp ./theming/ nextcloud_app_1:/var/www/html/ docker-compose exec app chown -R www-data:www-data /var/www/html/theming docker cp ./config/config.php nextcloud_app_1:/var/www/html/config docker-compose exec app chown -R www-data:www-data /var/www/html/config如果您想要保留文件的元数据(如时间戳),请使用类似这样的纯
cp将数据直接从主机复制到命名卷中:cp --preserve --recursive ./data/ /path/to/nextcloudVolume/data -
仅复制您使用的自定义应用程序(或直接从网络界面重新下载它们):
docker cp ./custom_apps/ nextcloud_data:/var/www/html/ docker-compose exec app chown -R www-data:www-data /var/www/html/custom_apps
问题 / 事项
如果您在使用该图像时遇到任何问题或疑问,请访问我们的 Github 存储库并提交一个问题。
图像变体
nextcloud 图像有多种类型,每种都针对特定的用例而设计。
nextcloud:<version>
这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。
nextcloud:<version>-alpine
此图像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中获取。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此总体上会生成更精简的镜像。
当您首要关注的是最终图像大小尽可能小的时候,此变体是有用的。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 及相关库,因此软件往往会根据其对 libc 要求/假设的深度而遇到问题。有关可能出现的问题以及使用基于 Alpine 的图像的一些利弊比较的更多讨论,请参阅此 Hacker News 评论线程。
为尽量减小镜像大小,在基于 Alpine 的镜像中通常不会包含其他相关工具(例如 git 或 bash )。以该镜像为基础,在您自己的 Dockerfile 中添加您需要的内容(如果您不熟悉如何安装软件包,请参阅 alpine 镜像说明中的示例)。
许可证
查看此映像中所包含软件的许可证信息。
与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。
一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 nextcloud/ 目录中找到。
对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。