PHP的composer软件包管理器的容器显示消息/错误:带有docker-compose

时间:2019-08-23 14:24:30

标签: docker docker-compose composer-php yaml dockerfile

我正在尝试创建一个composer容器(Dockerfile)并在我的docker-compose.yml中使用此容器,但是看来该容器没有启动。

每次运行docker-compose up

时,我都会面对以下消息
  

docker_composer_1退出,代码为0

这些是我的Dockerfiledocker-compose.yml文件:

Dockerfile

#composer
FROM composer
EXPOSE 9090

docker-compose.yml

version: '3'

services:
  php-fpm:
    build:
      context: ./php-fpm
    volumes:
      - ../src:/var/www

  nginx:
    build:
      context: ./nginx
    ports:
      - "80:80"
    volumes:
      - ../src/html:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/sites/:/etc/nginx/sites-available
      - ./nginx/conf.d/:/etc/nginx/conf.d
    depends_on:
      - php-fpm

  database:
    build:
      context: ./database
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=secret
      - MYSQL_ROOT_PASSWORD=docker
    volumes:
      - ./database/data.sql:/docker-entrypoint-initdb.d/data.sql

  phpmyadmin:
    build:
      context: ./phpmyadmin
    environment:
      - PMA_HOST=database
      - PMA_PORT=3306
      - MYSQL_ROOT_PASSWORD=docker
    ports:
      - "8080:80"
    depends_on:
      - database

  composer:
    build:
      context: ./composer
    volumes:
      - ../src/html:/var/www/html
    ports:
      - "9090:80"

我不想将Composer安装到php容器中。 我认为这不是一个很好的解决方案。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

composer是一个程序包管理器,与“服务”相对应,是一个永无止境的过程。

composer命令旨在运行一次,执行任务并在完成任务后(例如,安装或更新软件包,显示软件包信息等)以状态码结尾。如果命令成功运行,则此状态码为0;如果命令失败,则此状态码为非零。

结论:

  

以状态代码0激发容器的消息不是失败指示,而是每个composer [..]命令的预期行为。

启动composer容器时,它将执行CMDDockerfile中配置的容器的默认命令,并退回到ENTRYPOINT composer可执行文件,不带任何参数。

您可以通过运行以下方法来验证此行为:

docker-compose logs composer 

composer只是一个实用程序,因此不应在docker-compose.yml中定义为“服务”。您可以将其保留在其中,以便能够运行快速的一次性命令,例如:

docker-compose run composer install 

...但是您必须忍受命令已退出的提示。

一般建议:

docker-compose不是任务运行程序,也不是为一次性命令设计的。维护者拒绝了一些实现功能以支持此类功能的建议。

示例:

  • 实现一个选项,以跳过docker-compose up->参见某些issue
  • 的某些容器的自动启动