Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该还有具体的维护者信息,但题目中未给出,所以翻译只能到此为止。)
    Docker 社区

  • 哪里可以获得帮助:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签及各自的 Dockerfile 链接

快速参考(续)

什么是 Redmine?

Redmine 是一个免费且开源的、基于网络的项目管理和问题跟踪工具。它允许用户管理多个项目及相关子项目。它具有每个项目的维基和论坛、时间跟踪以及灵活的基于角色的访问控制功能。它包含一个日历和甘特图,以帮助直观地呈现项目及其截止日期。Redmine 与各种版本控制系统集成,并包括一个存储库浏览器和差异查看器。

wikipedia.org/wiki/Redmine (该内容为网址,在中文语境中一般不进行翻译,直接保留原文)

logo

如何使用此图像

使用 SQLite3 运行 Redmine

这是最简单的设置;只需运行 Redmine。

$ docker run -d --name some-redmine redmine

非用于多用户生产用途(redmine 维基)

使用数据库容器运行 Redmine

使用数据库服务器运行 Redmine 是推荐的方式。

  1. 启动一个数据库容器

    • PostgreSQL(该词通常不进行逐字翻译,直接保留原样)

      $ docker run -d --name some-postgres --network some-network -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=redmine postgres
      
    • MySQL(在运行 Redmine 时将 -e REDMINE_DB_POSTGRES=some-postgres 替换为 -e REDMINE_DB_MYSQL=some-mysql

      $ docker run -d --name some-mysql --network some-network -e MYSQL_USER=redmine -e MYSQL_PASSWORD=secret -e MYSQL_DATABASE=redmine -e MYSQL_RANDOM_ROOT_PASSWORD=1 mysql:5.7
      
  2. 启动 Redmine

    $ docker run -d --name some-redmine --network some-network -e REDMINE_DB_POSTGRES=some-postgres -e REDMINE_DB_USERNAME=redmine -e REDMINE_DB_PASSWORD=secret redmine
    

...通过 docker-composedocker stack deploy

示例 docker-compose.yml 用于 redmine

version: '3.1'

services:

  redmine:
    image: redmine
    restart: always
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: example
      REDMINE_SECRET_KEY_BASE: supersecretkey

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: redmine

Try in PWD

运行 docker stack deploy -c stack.yml redmine (或 docker-compose -f stack.yml up ),等待其完全初始化,然后访问 http://swarm-ip:8080http://localhost:8080http://host-ip:8080 (视情况而定)。

替代网络服务器

此存储库中的其他标签,如带有 passenger 的那些,使用与使用 Puma( rails server )的默认标签相同的环境和 --links ,但为您提供了不同的 Web 和应用服务器选项。 passenger 使用 Phusion Passenger。 tini 用于清除僵尸进程。

访问应用程序

目前,上游的默认用户名和密码为 admin/admin(用于登录应用程序)。

数据存储于何处

重要提示:在 Docker 容器中运行的应用程序所使用的数据有几种存储方式。我们鼓励 redmine 镜像的用户熟悉可用的选项,包括:

  • 让 Docker 通过使用其自身的内部卷管理将文件写入主机系统的磁盘来管理您的文件存储。这是默认设置,对用户来说简单且相当透明。缺点是,对于直接在主机系统(即在容器之外)上运行的工具和应用程序,这些文件可能很难定位。
  • 在主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内部可见的目录。这样可以将数据库文件放置在主机系统上的已知位置,并且便于主机系统上的工具和应用程序访问这些文件。缺点是用户需要确保该目录存在,并且例如主机系统上的目录权限和其他安全机制已正确设置。

Docker 文档是了解不同存储选项和变体的良好起点,并且有多个博客和论坛帖子在该领域进行讨论并提供建议。在这里,我们将仅为上述后一种选项展示基本过程:

  1. 在您的主机系统的合适卷上创建一个数据目录,例如 /my/own/datadir

  2. 像这样启动您的 redmine 容器:

    $ docker run -d --name some-redmine -v /my/own/datadir:/usr/src/redmine/files --link some-postgres:postgres redmine
    

命令的 -v /my/own/datadir:/usr/src/redmine/files 部分将底层主机系统中的 /my/own/datadir 目录作为 /usr/src/redmine/files 挂载到容器内部,Redmine 将在其中存储上传的文件。

端口映射

如果您希望能够从主机访问实例而无需容器的 IP,可使用标准端口映射。只需将 -p 3000:3000 添加到 docker run 参数中,然后在浏览器中访问 http://localhost:3000http://host-ip:3000

环境变量

当您启动 redmine 图像时,您可以通过在 docker run 命令行上传递一个或多个环境变量来调整实例的配置。

REDMINE_DB_MYSQLREDMINE_DB_POSTGRES ,或 REDMINE_DB_SQLSERVER

这些变量分别允许您设置 MySQL、PostgreSQL 或 Microsoft SQL 主机的主机名或 IP 地址。这些值是相互排斥的,因此如果设置了任意两个,则是未定义的行为。如果未设置任何变量,映像将回退到使用 SQLite。

REDMINE_DB_PORT

此变量允许您指定自定义数据库连接端口。如果未指定,它将默认为常规连接端口:MySQL 为 3306,PostgreSQL 为 5432,SQLite 为空字符串。

REDMINE_DB_USERNAME

此变量设置 Redmine 及任何 rake 任务用于连接到指定数据库的用户。如果未指定,对于 MySQL,它将默认为 root ;对于 PostgreSQL,将默认为 postgres ;对于 SQLite,将默认为 redmine

REDMINE_DB_PASSWORD

此变量设置指定用户连接到数据库时将使用的密码。没有默认值。

REDMINE_DB_DATABASE

此变量设置 Redmine 在指定数据库服务器中使用的数据库。如果未指定,对于 MySQL,它将默认为 redmine ;对于 PostgreSQL,默认为 REDMINE_DB_USERNAME 的值;对于 SQLite,默认为 sqlite/redmine.db

REDMINE_DB_ENCODING

此变量设置连接到数据库服务器时要使用的字符编码。如果未指定,对于 MySQL,它将使用 mysql2 库( UTF-8 )的默认值,对于 PostgreSQL 为 utf8 ,对于 SQLite 为 utf8

REDMINE_NO_DB_MIGRATE

此变量允许您控制在容器启动时是否运行 rake db:migrate 。只需将该变量设置为非空字符串,如 1true ,则迁移脚本在容器启动时不会自动运行。

如果您使用默认的 CMD 以外的其他内容(例如 bash )启动映像, db:migrate 也将无法运行。有关详细信息,请查看映像中的当前 docker-entrypoint.sh

REDMINE_PLUGINS_MIGRATE

此变量允许您控制在容器启动时是否运行 rake redmine:plugins:migrate 。只需将该变量设置为非空字符串,如 1true ,则迁移脚本将在每次容器启动时自动运行。它将在 db:migrate 之后运行。

如果您使用默认的 CMD 以外的其他内容(例如 bash )启动映像,则 redmine:plugins:migrate 将不会运行。有关详细信息,请查看映像中的当前 docker-entrypoint.sh

REDMINE_SECRET_KEY_BASE

在使用 Docker Swarm 副本在容器之间进行负载均衡以维护会话连接时,需要此变量。它将创建一个初始的 config/secrets.yml 并设置 secret_key_base 值,该值“被 Rails 用于对存储会话数据的 Cookie 进行编码,从而防止其被篡改。生成新的秘密令牌会在重启后使所有现有会话失效”(会话存储)。如果您未设置此变量或提供 secrets.yml ,则将使用 rake generate_secret_token 生成一个。

以任意用户身份运行

对于在没有 Phusion Passenger 的情况下运行 Redmine,您可以简单地使用 --user 标志来 docker run 并为其提供一个 username:groupUID:GID ,用户不需要存在于容器中

要以任意用户身份运行 redmine:passenger 变体,然而您需要该用户存在于 /etc/passwd 中。以下是一些实现此操作的示例:

  1. 在您的主机上创建用户并挂载 /etc/passwd:/etc/passwd:ro

  2. 创建一个 Dockerfile FROM redmine:passenger 并包含类似 RUN groupadd -r group && useradd --no-log-init -r -g group user 的内容

    FROM redmine:passenger
    RUN groupadd -r group && useradd --no-log-init -r -g group user
    USER user
    

Docker 机密信息

作为通过环境变量传递敏感信息的替代方法,可将 _FILE 附加到先前列出的环境变量上,从而使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 机密中加载密码。例如:

$ docker run -d --name some-redmine -e REDMINE_DB_MYSQL_FILE=/run/secrets/mysql-host -e REDMINE_DB_PASSWORD_FILE=/run/secrets/mysql-root redmine:tag

目前,这仅支持 REDMINE_DB_MYSQLREDMINE_DB_POSTGRESREDMINE_DB_PORTREDMINE_DB_USERNAMEREDMINE_DB_PASSWORDREDMINE_DB_DATABASEREDMINE_DB_ENCODINGREDMINE_SECRET_KEY_BASE

图像变体

redmine 图像有多种类型,每种都针对特定的用例而设计。

redmine:<version>

这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。

其中一些标签的名称中可能包含“bookworm”之类的字样。这些是 Debian 发行版的套件代号,表明该映像所基于的发行版。如果您的映像需要安装除映像自带的软件包之外的任何其他软件包,您可能需要明确指定其中之一,以在 Debian 有新版本发布时最大程度地减少损坏。

redmine:<version>-alpine

此图像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中获取。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此总体上会生成更精简的镜像。

当您首要关注的是最终图像大小尽可能小的时候,此变体是有用的。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 及相关库,因此软件往往会根据其对 libc 要求/假设的深度而遇到问题。有关可能出现的问题以及使用基于 Alpine 的图像的一些利弊比较的更多讨论,请参阅此 Hacker News 评论线程。

为尽量减小镜像大小,在基于 Alpine 的镜像中通常不会包含其他相关工具(例如 gitbash )。以该镜像为基础,在您自己的 Dockerfile 中添加您需要的内容(如果您不熟悉如何安装软件包,请参阅 alpine 镜像说明中的示例)。

许可证

Redmine 是开源的,根据 GNU 通用公共许可证 v2(GPL)的条款发布。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 redmine/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。