Почему команда «sail up» не создает мои док-контейнеры laravel?

Я пробую Laravel Sail, так как уже несколько лет успешно использую Laradock и надеюсь упростить настройку среды разработки. У меня Windows 10 64, Docker Desktop 3.0, установленный с использованием WSL 2, и мое приложение Laravel работает под управлением Laravel 8.20.1.

В моем проекте Laravel я следовал руководству по настройке Laravel Sail: я запускал composer require laravel/sail --dev и php artisan sail:install и вижу docker-compose.yml в своем корневом каталоге.

Но когда я запускаю ./vendor/bin/sail up я получаю эту ошибку:

./vendor/bin/sail: line 1: XSym: command not found
./vendor/bin/sail: line 2: 0024: command not found
./vendor/bin/sail: line 3: a81960381c7144e16cd1e768af147de3: command not found
./vendor/bin/sail: line 4: ../laravel/sail/bin/sail: No such file or directory

Обновление: я исправил вышеизложенное с помощью Quumber: удаление /vendor/ и переустановка. Но теперь я получаю эту ошибку:

В GitBash я получаю такой ответ:

Unsupported operating system [MINGW64_NT-10.0-19041]. Laravel Sail supports macOS, Linux, and Windows (WSL2).

Если я сейчас попробую из Powershell, я получу:

/bin/bash: C:\Users\ssund\Source\steepdb\vendor\bin/../laravel/sail/bin/sail: No such file or directory

-------------Запрошенные вложения------

докер-compose.yml:

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
            # - selenium
    # selenium:
    #     image: 'selenium/standalone-chrome'
    #     volumes:
    #         - '/dev/shm:/dev/shm'
    #     networks:
    #         - sail
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
    redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
    # memcached:
    #     image: 'memcached:alpine'
    #     ports:
    #         - '11211:11211'
    #     networks:
    #         - sail
    mailhog:
        image: 'mailhog/mailhog:latest'
        ports:
            - 1025:1025
            - 8025:8025
        networks:
            - sail
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local

Dockerfile в \vendor\laravel\sail\runtimes\7.4:

FROM ubuntu:20.04

LABEL maintainer = "Taylor Otwell"

ARG WWWGROUP

WORKDIR /var/www/html

ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update \
    && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \
    && mkdir -p ~/.gnupg \
    && chmod 600 ~/.gnupg \
    && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
    && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
    && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
    && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
    && apt-get update \
    && apt-get install -y php7.4-cli php7.4-dev \
       php7.4-pgsql php7.4-sqlite3 php7.4-gd \
       php7.4-curl php7.4-memcached \
       php7.4-imap php7.4-mysql php7.4-mbstring \
       php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap \
       php7.4-intl php7.4-readline php7.4-pcov \
       php7.4-msgpack php7.4-igbinary php7.4-ldap \
       php7.4-redis \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
    && curl -sL https://deb.nodesource.com/setup_15.x | bash - \
    && apt-get install -y nodejs \
    && apt-get install -y mysql-client \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4

RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail

COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container

EXPOSE 8000

ENTRYPOINT ["start-container"]

Попробуйте удалить каталог vendor и запустить composer update.

Qumber 29.12.2020 07:13

Спасибо @Qumber. Я попробовал это, и это продвинуло меня на шаг вперед. У меня нет 4 ошибки. Теперь, когда я запускаю «./vendor/bin/sail up» из PowerShell, я получаю приглашение «Как вы хотите открыть этот файл». Простите мое невежество, но я не уверен, что на самом деле должно запускать это. У меня работает PHP 7.4 CLI и Docker Desktop 3, если это имеет значение.

sersun 29.12.2020 08:46

Не могли бы вы поделиться с нами Dockerfile и docker-compose? Кроме того, не могли бы вы попробовать то же самое в терминале Ubuntu, и если что-то пойдет не так?

Qumber 29.12.2020 09:23

@Qumber Я прикрепил файлы для вас выше.

sersun 29.12.2020 09:55

Хорошо, я решил проблему во втором комментарии выше, снова очистив vendor/ и повторно запустив установку композитора. Теперь я получаю сообщение «Неподдерживаемая операционная система» при запуске из GitBash и ошибку «файл не найден» при запуске из Powershell. Я добавил эти полные ошибки к основному вопросу выше.

sersun 30.12.2020 20:32

Вы пробовали запускать ./vendor/bin/sail up из WSL2?

Clément Baconnier 30.12.2020 20:58

@ClémentBaconnier, спасибо, я только что заметил ваш комментарий после того, как написал свой ответ ниже. Это была большая часть этого.

sersun 30.12.2020 22:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
9
7
44 919
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Хорошо, здесь было несколько вещей, которые мне нужно было исправить.

  1. Сначала @Qumber помог мне, предложив стереть /vendor/ и снова запустить установку/обновление композитора. Это исправило отсутствующий файл паруса, который по какой-то причине не добавлялся.
  2. У меня также были некоторые проблемы, связанные с разрешениями, возможно, из-за запуска компоновки в WSL, а затем попытки запустить парус в Windows/GitBash (или наоборот).
  3. Самой большой проблемой было мое неправильное понимание интеграции Docker с WSL2 и того, что команду паруса следует запускать из WLS (исходя из Ларадока, я сделал несколько неверных предположений). Мне нужно было установить дистрибутив Linux (я выбрал Ubuntu 20.x) И убедиться, что он установлен по умолчанию, запустив wsl -s . Вы можете проверить, что в настоящее время используется по умолчанию, с помощью wsl -l -v. Более подробные инструкции по установке см. на странице https://learn.microsoft.com/en-us/windows/wsl/install-win10#step-4---download-the-linux-kernel-update-package .

Как только я исправил вышеуказанное, я смог открыть Windows Terminal, создать вкладку Ubuntu и запустить ./vendor/bin/sail up, и он был выполнен.

Я обнаружил, что запуск из Windows Terminal дает совсем другие (и намного лучшие) результаты, чем запуск WSL из PowerShell. Первый, кажется, устанавливает все правильные разрешения, а второй - нет. Я думаю, это связано с тем, как разные терминалы монтируют файловые системы между Windows и основной ОС Linux, но есть некоторые основные различия, в которых я не смог разобраться. По моему опыту, Windows Terminal — это то, что нужно.

Jason 29.04.2021 13:02

Спасибо. Изменение дистрибутива по умолчанию на Debian (или Ubuntu) помогло мне

Pieterjan 10.11.2021 17:34

Спасибо. Я запускал команды в терминале Windows и получал сообщение «Нет такого файла или каталога». После их запуска в терминале WSL2 все заработало корректно.

Paulo Costa 15.01.2022 14:52

Это решение верно до тех пор, пока я не поменяю разрешение поставщика, а затем последовал решению Qumbor и sersun. Я согласен с этим решением.

Two 10.05.2023 07:33

Сначала нужно установить Linux под Windows. Ваш ответ правильный. Спасибо :)

Для меня это была проблема с разрешениями. Работает, как работает sudo.

Использование Win10 с WSL Ubuntu 20.04 LTS.

Если вы, как и я, клонировали проект Laravel с GitHub, где ни одна из зависимостей Composer приложения, включая Sail, недоступна, вам нужно будет выполнить следующие команды из каталога проекта. Следующие команды используют небольшой контейнер Docker, содержащий PHP и Composer, для установки зависимостей приложения:

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v $(pwd):/var/www/html \
    -w /var/www/html \
    laravelsail/php81-composer:latest \
    composer install --ignore-platform-reqs

Дополнительную информацию можно найти в документации Laravel.

Это может показаться сумасшедшим, но у меня была такая же проблема.

Я только что сделал vendor/bin/sail up

Вместо .vendor/bin/sail up

И это сработало!

Я столкнулся с этой проблемой на своем Mac. Эта проблема связана с разрешением

Решение для MAC

1. Откройте меню Apple и выберите «Системные настройки».

2: Выберите панель управления «Безопасность и конфиденциальность».

3: Теперь выберите вкладку «Конфиденциальность», затем в меню слева выберите «Полный доступ к диску».

4: Щелкните значок замка в левом нижнем углу панели настроек и войдите в систему с правами администратора.

5: Теперь нажмите кнопку [+] плюс, чтобы добавить приложение с полным доступом к диску.

6: Перейдите в папку /Applications/Utilities/ и выберите «Терминал», чтобы предоставить Терминалу права полного доступа к диску.

7: Перезапустите терминал, сообщения об ошибках «Операция не разрешена» исчезнут.

После этого вы можете установить Laravel.

Решение для Windows 10 Найдите файл паруса в папке поставщика: vendor/laravel/sail/bin/sail и измените этот код:

  Verify operating system is supported...
    case "${UNAMEOUT}" in
        Linux*)             MACHINE=linux;;
        Darwin*)            MACHINE=mac;;
        *)                  MACHINE = "UNKNOWN"
    esac
    
    if [ "$MACHINE" == "UNKNOWN" ]; then
        echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2
    
        exit 1
    fi

к этому:

# Verify operating system is supported...
#case "${UNAMEOUT}" in
#    Linux*)             MACHINE=linux;;
#    Darwin*)            MACHINE=mac;;
#    *)                  MACHINE = "UNKNOWN"
#esac
#
#if [ "$MACHINE" == "UNKNOWN" ]; then
#    echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2
#
#    exit 1
#fi

затем используйте GitBash для запуска commond

./vendor/bin/sail up

От Неподдерживаемая операционная система Laravel 8 с Sail на Windows 10 (WSL2)

Другие вопросы по теме