Docker-安装Composer/bin/sh:1:php:找不到curl:(23)写入正文失败(0!=16133)


你好,我正在为我的laravel项目创建一个dockerfile。到目前为止:
FROM php:7.2-cli
FROM nginx
FROM node:8
MAINTAINER zachary tyhacz
# does not install mysql
# mysql is outside container
RUN apt-get update -y && apt-get install -y openssl zip unzip git
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /var/www/public
COPY . /var/www/public
COPY nginx.conf /etc/nginx/sites-available/domain
RUN ln -s /etc/nginx/sites-available /etc/nginx/sites-enabled
RUN npm install
RUN composer install
# sets up the database
CMD php artisan migrate:fresh --seed
# resets configuration files
CMD php artisan config:cache
# refreshes routes
CMD php artisan route:cache
# enables serve
CMD php artisan serve --host=0.0.0.0 --port=436
EXPOSE 8080/udp
EXPOSE 8080/tcp
EXPOSE 80/udp
EXPOSE 80/tcp
EXPOSE 436/tcp
EXPOSE 436/udp

在docker标签创建图像时,它会得到以下指令:

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

它抛出这个错误并停止。

/bin/sh: 1: php: not found
curl: (23) Failed writing body (0 != 16133)

我不确定出了什么问题。我认为可能是权限问题或目录问题。

感谢任何人在帮助我完成方面的建议

此外,我在帮助我创建这个dockerfile时的参考资料是:https://buddy.works/guides/laravel-in-docker

在Dockerfile中,使用FROM只能有一个基本映像。基本上,那个告诉docker从什么开始。在您的案例中,您有几个FROM,所以Docker似乎只是拿走了您给它的最后一个,在本例中是node:8。所以PHP永远不会被安装。

要解决这个问题,您需要选择一个基本映像(例如php),并在此基础上安装其他依赖项,这样您就可以使用RUN在php映像上手动安装nginx和node。您可能还想考虑构建一个单独的nginx映像。这被认为是在可能的情况下将您的服务划分为不同图像的良好做法。

此外,不要使用多个CMD条目,而是使用一个小的启动shell脚本。例如

#!/usr/bin/env bash
set -e
php artisan migrate:fresh --seed
php artisan config:cache
php artisan route:cache
exec php artisan serve --host=0.0.0.0 --port=436

把它放在一个名为start.sh或类似的脚本中,然后在Dockerfile中,使用

CMD ["./start.sh"]

然后,您可能还想为您的nginx服务启动第二个容器。您可以使用dockerrun手动完成此操作,但我建议您查看docker-compose。它可以帮助您同时构建和运行多个容器。

相关内容

  • 没有找到相关文章

最新更新