在现有的docker镜像中安装PHP composer

时间:2018-03-12 12:03:33

标签: docker composer-php docker-compose

我正在通过docker-compose.yml文件运行docker-letsencrypt。它附带PHP。我正试图用PHP composer运行它。我可以通过bash在容器中安装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

我确实找到了作曲家的单行安装程序:

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

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

1 个答案:

答案 0 :(得分:3)

您对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
  ...