[英]Docker - Installing Composer /bin/sh: 1: php: not found curl: (23) Failed writing body (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
使用一個基本映像。 基本上,這告訴碼頭工人從什么開始。 在您的情況下,您有幾個FROM
,因此看來Docker只是采用了您提供的最后一個,在本例中為node:8
。 因此,從未安裝過PHP。
要解決此問題,您需要選擇一個基本映像(例如php),並在此基礎上安裝其他依賴項,以便可以使用RUN
手動將nginx和node安裝在php映像之上。 您可能還需要考慮構建單獨的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服務啟動另一個容器。 您可以使用docker run手動執行此操作,但我建議您檢查docker-compose。 它可以幫助您一次構建和運行多個容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.