Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
    罗布·巴斯特,以及社区的贡献。

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

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

快速参考(续)

什么是 Composer?

Composer 是一个用于 PHP 依赖管理的工具,由 PHP 编写。它允许您声明项目所依赖的库,并为您管理(安装/更新)它们。

您可以在我们的官方文档中阅读更多关于 Composer 的内容。

logo

如何使用此图像

基本用法

$ docker run --rm --interactive --tty \
  --volume $PWD:/app \
  composer <command>

持久缓存 / 全局配置

您可以将主机上的 Composer 主目录绑定挂载到容器中,以实现持久缓存或共享全局配置:

$ docker run --rm --interactive --tty \
  --volume $PWD:/app \
  --volume ${COMPOSER_HOME:-$HOME/.composer}:/tmp \
  composer <command>

注意:这依赖于一个事实,即在图像中默认情况下 COMPOSER_HOME 值被设置为 /tmp

或者如果您的环境遵循 XDG 规范:

$ docker run --rm --interactive --tty \
  --env COMPOSER_HOME \
  --env COMPOSER_CACHE_DIR \
  --volume ${COMPOSER_HOME:-$HOME/.config/composer}:$COMPOSER_HOME \
  --volume ${COMPOSER_CACHE_DIR:-$HOME/.cache/composer}:$COMPOSER_CACHE_DIR \
  --volume $PWD:/app \
  composer <command>

文件系统权限

默认情况下,Composer 在容器内以 root 身份运行。这可能会导致您的主机文件系统出现权限问题。您可以通过以不同的用户身份运行容器来解决此问题:

$ docker run --rm --interactive --tty \
  --volume $PWD:/app \
  --user $(id -u):$(id -g) \
  composer <command>

查看:https://docs.docker.com/engine/reference/run/#user 以获取详细信息。

注意:Docker for Mac 的表现有所不同,此提示可能不适用于 Docker for Mac 用户。

私有仓库 / SSH 代理

当您需要访问私有存储库时,您要么需要共享您配置的凭据,要么在正在运行的容器内挂载您的 ssh-agent 套接字:

$ eval $(ssh-agent); \
  docker run --rm --interactive --tty \
  --volume $PWD:/app \
  --volume $SSH_AUTH_SOCK:/ssh-auth.sock \
  --env SSH_AUTH_SOCK=/ssh-auth.sock \
  composer <command>

注意:在 OSX 上,这需要 Docker For Mac v2.2.0.0 或更高版本,详见 docker/for-mac#410 。

当将私有仓库的使用与以另一个用户身份运行 Composer 相结合时,您可能会遇到不存在的用户错误(由 ssh 抛出)。为了解决此问题,将主机的 passwd 和 group 文件(只读)绑定挂载到容器中:

$ eval $(ssh-agent); \
  docker run --rm --interactive --tty \
  --volume $PWD:/app \
  --volume $SSH_AUTH_SOCK:/ssh-auth.sock \
  --volume /etc/passwd:/etc/passwd:ro \
  --volume /etc/group:/etc/group:ro \
  --env SSH_AUTH_SOCK=/ssh-auth.sock \
  --user $(id -u):$(id -g) \
  composer <command>

故障排除

PHP 版本及扩展

我们的镜像旨在无需在您的主机上安装 PHP 运行时即可快速运行 Composer。您不应依赖我们容器中的 PHP 版本。我们不为每个受支持的 PHP 版本提供 Composer 镜像,因为我们不希望鼓励将 Composer 用作基础镜像或生产镜像。

我们试图提供一个尽可能精简的映像,仅为运行 Composer 而构建。有时,依赖项或 Composer 脚本需要某些 PHP 扩展可用。

建议:

  • (最佳)创建您自己的构建映像并在其中安装 Composer。

    注意:Docker 17.05 引入了多阶段构建,极大地简化了这一过程:

    COPY --from=composer /usr/bin/composer /usr/bin/composer
    
  • (或者)在您的 composer.json 中指定目标平台/扩展

    {
      "config": {
        "platform": {
          "php": "MAJOR.MINOR.PATCH",
          "ext-something": "MAJOR.MINOR.PATCH"
        }
      }
    }
    
  • (不鼓励)将 --ignore-platform-reqs 和/或 --no-scripts 标志传递给 installupdate

    $ docker run --rm --interactive --tty \
      --volume $PWD:/app \
      composer install --ignore-platform-reqs --no-scripts
    

许可证

查看此映像中所包含软件的许可证信息。

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

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

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