【问题标题】:Install PHP composer in existing docker image在现有的 docker 镜像中安装 PHP composer
【发布时间】:2018-08-20 10:43:31
【问题描述】:

我正在通过docker-compose.yml 文件运行docker-letsencrypt。它带有 PHP。我正在尝试用它运行PHP composer。我可以通过bash 在容器中安装作曲家,但是当我重新创建容器时不会坚持。如何在默认情况下不附带 compose 的现有容器中永久安装 composer?

我的docker-compose.yml 看起来像这样:

version: "3"
services:

  letsencrypt:
    image: linuxserver/letsencrypt
    container_name: letsencrypt
    cap_add:
      - NET_ADMIN
    ports:
      - "80:80"
      - "443:443"
    environment:
      - PUID=1000
      - PGID=1000
      - EMAIL=<mailadress>
      - URL=<tld>
      - SUBDOMAINS=<subdomains>
      - VALIDATION=http
      - TZ=Europe/Paris
    volumes:
      - /home/ubuntu/letsencrypt:/config

我确实找到了 composer 的单行安装程序:

php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

我可以将它添加到我的docker-compose.yml 中的command,但即使在容器重新启动时也会重新安装作曲家,对吗?

【问题讨论】:

    标签: docker composer-php docker-compose


    【解决方案1】:

    您对command 选项的评论是正确的,它确实会在您每次启动容器时运行。

    一种解决方法是创建自己的 dockerfile,如下所示:

    FROM linuxserver/letsencrypt
    RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
    

    (RUN 指令仅在构建步骤中运行)。

    然后你应该修改你的 docker-compose.yml :

    ...
    build: ./dir
      #dir/ is the folder where your Dockerfile resides
      #use the dockerfile directive if you use a non-default naming convention
      #or if your Dockerfile isn't at the root of your project 
    container_name: letsencrypt
      ...
    

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 2018-11-14
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2017-12-18
      相关资源
      最近更新 更多