我试图找到一种使用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在处理数据库迁移时要求作曲家调用作曲家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"
我很乐意为我提供建议,如何将作曲家添加到dockerfile的PATH中,或者我可以做些什么来克服此错误。
感谢您的支持。 另外:如果需要查看docker-compose.yml文件或其他内容,this是gitub存储库。
答案 0 :(得分:4)
在Dockerfile中:
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
答案 1 :(得分:3)
我可以安装composer在我的测试dockerfile上添加以下行:
# 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
它对我有用,可以通过访问我的容器bash并执行以下命令来测试是否安装了作曲家:
composer --version
Composer version 1.6.5 2018-05-04 11:44:59
答案 2 :(得分:1)
我们基本上使用相同的命令来运行
--install-dir=/usr/local/bin
或者,您应该将作曲家的bin文件路径添加到$ PATH变量中。
export PATH=$PATH":/usr/bin"
答案 3 :(得分:1)
使用以下内容创建您的作曲家文件的可执行文件
RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer && chmod +x /usr/bin/composer
答案 4 :(得分:1)
这是我在 2021 年使用 Laravel 8.4 将其部署到 Google Cloud 中的 CloudRun 的方法:
Dockerfile
#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
...
// 复制 Composer 依赖项
# 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
答案 5 :(得分:0)
我只想提出另一种方法。
Dockerfile:
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
答案 6 :(得分:0)
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'