你好,我正在为我的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
答案 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。它可以帮助您一次构建和运行多个容器。