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

时间:2019-01-10 18:48:37

标签: php laravel docker composer-php dockerfile

你好,我正在为我的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

1 个答案:

答案 0 :(得分:1)

在Dockerfile中,只能使用FROM获得一个基本映像。基本上,这告诉码头工人从什么开始。在您的情况下,您有几个FROM,因此看来Docker只是采用了您给的最后一个,在本例中为node:8。因此,从未安装过PHP。

要解决此问题,您需要选择一个基本映像(例如php),并在此基础上安装其他依赖项,因此您可以使用{手动将nginx和node安装在php映像之上{1}}。您可能还需要考虑构建单独的nginx图像。在可能的情况下,将服务分成不同的映像是一种很好的做法。

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

CMD

将其放入名为#!/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 或类似的脚本中,然后在Dockerfile中使用

start.sh

然后,您可能还需要为nginx服务启动另一个容器。您可以使用docker run手动执行此操作,但我建议您检查docker-compose。它可以帮助您一次构建和运行多个容器。