如何在Docker容器中安装PHP编写器

6gpjuf90  于 2023-01-12  发布在  PHP
关注(0)|答案(9)|浏览(149)

我试图找到一种使用docker和laravel创建开发环境的方法。
我有以下的dockerfile:

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql
&& chmod -R o+rw laravel-master/bootstrap laravel-master/storage

Laravel要求composer在处理数据库迁移时调用composer dump-autoload。因此,我需要docker容器中的composer。
我试过:

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer

但当我打电话

docker-compose up
docker-compose exec app composer dump-autoload

它抛出以下错误:

rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"composer\\\": executable file not found in $PATH\"\n"

我非常乐意得到关于如何将Composer添加到我的DockerFile中的路径的建议,或者我还可以做些什么来克服这个错误。
感谢您的支持。另外:如果您需要查看docker-compose.yml文件或其他任何内容,this是gitub存储库。

tp5buhyn

tp5buhyn1#

在停靠文件中:

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
8fq7wneg

8fq7wneg2#

我可以安装composer,在我的测试文档文件中添加以下行:

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

下面是dockerfile:

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

这对我来说很有效,测试 composer 是否安装在我访问我的容器bash并执行:

composer --version
Composer version 1.6.5 2018-05-04 11:44:59
zyfwsgd6

zyfwsgd63#

这是我在2021年使用Laravel 8.4将其部署到Google Cloud中的CloudRun的方法:
停靠文件

#Get Composer
FROM composer:2.0 as vendor

WORKDIR /app

COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock

RUN composer install \
    --no-interaction \
    --no-plugins \
    --no-scripts \
    --no-dev \
    --prefer-dist

COPY . .
RUN composer dump-autoload

//更多自定义步骤,如

FROM node:14.9 as frontend
...
FROM php:7.4-fpm
...

//复制编写器依赖项

# Copy Composer dependencies
COPY --from=vendor app/vendor/ ./vendor/
COPY . .

//更多自定义步骤

...

我的Dockerfile结束,以启动具有已清除优化缓存的应用

# Run Laravel commands
RUN php artisan optimize:clear

CMD php artisan serve --host=0.0.0.0 --port=8080

EXPOSE 8080
eagi6jfj

eagi6jfj4#

使用创建合成器文件的可执行文件

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer && chmod +x /usr/bin/composer
frebpwbc

frebpwbc5#

在使用curl的文档文件中使用composer

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

停靠文件

FROM 8.1.4-fpm

RUN apt-get update && apt-get install -y \
    git \
    curl \
    zip \
    unzip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /var/www
vatpfxk5

vatpfxk56#

我们有基本相同的命令运行的差异,

--install-dir=/usr/local/bin

或者,您应该将编写器bin文件路径添加到$PATH变量中。

export PATH=$PATH":/usr/bin"
qyuhtwio

qyuhtwio7#

我只是想建议另一种方法。
停靠文件:

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

lnlaulya8#

FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
RUN apk update
RUN apk upgrade
RUN apk add bash
RUN alias composer='php /usr/bin/composer'
yhived7q

yhived7q9#

我的问题解决了。我只是停止了系统上的firewalld服务

相关问题