php - 如何在 docker-compose 中使用官方 Composer 图像?

标签 php docker docker-compose composer-php

这是我的 docker-compose 文件

version: '3'

services:
    app:
        image: php7.1-apache-stretch
        container_name: php-app
        volumes:
            - .:/var/www/html
        ports:
            - 8080:80
    composer:
        image: composer:1.8
        container_name: composer-app
        volumes:
            - .:/var/www/html

然而,当我运行 docker-compose up 时,唯一运行的容器是 php-app。如何在 docker-compose 文件中运行 composer 并与我的应用程序容器通信?

最佳答案

理想情况下,您在多阶段构建中使用 Composer 镜像,以避免必须在主机上安装它及其所有依赖项。

为此创建一个像这样的 Dockerfile:

FROM composer:1.8 AS composer

FROM php:7.1-apache-stretch

COPY --from=composer /usr/bin/composer /usr/bin/composer

WORKDIR /app

COPY . .

# Place here your command that uses Composer
RUN composer install

注意:您需要查看 RUN 命令,因为我不是 PHP 开发人员....;)

现在 docker-compose.yml 看起来像这样:

version: "3"

services:
  app:
    build: .
    image: php-app:1.0
    container_name: "php-app"
    ports: 
      - "8080:80"

您不再需要该卷,因为文件已在构建时复制到镜像中。

构建镜像并运行服务:

docker-compose up --build -d

关于php - 如何在 docker-compose 中使用官方 Composer 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553119/

相关文章:

php - Laravel Eloquent ORM 方法基于 ids 数组检索多行

docker - Docker 'host' 和 'none' 网络有什么用?

postgresql - 尝试在 docker 中备份文件时如何正确指定命名卷

mongodb - 完成入口点脚本后停止容器

linux - AWS ECS 上的 Docker 容器始终显示 STOPPED

php - 按关系分页并排序

php - "Cannot use Intervention\Image\Facades\Image as Image because the name is already in use"

node.js - nuxt start 需要 node_modules 才能运行

php - 向 Docker 上的 Artisan 推荐方式

php - 带有隐藏字段的输入表单如何保护它