Docker - Установка Composer / bin / sh: 1: php: not found curl: (23) Сбой записи тела (0! = 16133) - PullRequest
0 голосов
/ 10 января 2019

Здравствуйте, я создаю dockerfile для моего проекта laravel. Вот и все:

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 голосов
/ 11 января 2019

Вы можете иметь только одно базовое изображение, используя FROM в Dockerfile. По сути, это говорит докеру, с чего начать. В вашем случае у вас есть несколько FROM с, поэтому кажется, что Docker просто берет последний, который вы ему дали, в данном случае node:8. Так что PHP никогда не устанавливается.

Чтобы решить эту проблему, вам нужно выбрать один базовый образ (например, php) и установить поверх него другие зависимости, чтобы вы могли вручную установить nginx и узел поверх изображения php, используя RUN. Вы также можете рассмотреть возможность создания отдельного изображения nginx. Это считается хорошей практикой по возможности разделять ваши сервисы на разные изображения.

Кроме того, вместо нескольких записей 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

Поместите это в скрипт с именем start.sh или что-то в этом роде, затем в вашем Dockerfile используйте

CMD ["./start.sh"]

Тогда, возможно, вы также захотите запустить второй контейнер для службы nginx. Вы можете сделать это вручную с помощью Docker Run, но я предлагаю проверить docker-compose. Он помогает вам создавать и запускать несколько контейнеров одновременно.

...