4

我正在尝试 Laravel Sail,因为我已经成功使用 Laradock 几年了,并希望简化我的开发环境设置。我使用的是 Windows 10 64,使用 WSL 2 安装的 Docker Desktop 3.0,我的 Laravel 应用程序正在运行 Laravel 8.20.1。

在我的 Laravel 项目中,我遵循了Laravel Sail 设置指南:我运行了composer require laravel/sail --devand ,并且在我的根目录中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

更新:我通过 Qumber 的帮助修复了上述问题:删除 /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

\vendor\laravel\sail\runtimes\7.4 中的 Dockerfile:

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"]
4

5 回答 5

12

好的,我需要在这里解决很多问题。

  1. @Qumber 最初通过建议我擦除 /vendor/ 并再次运行 composer install/update 来帮助我。这修复了由于某种原因没有添加的缺失的sails文件。
  2. 我还遇到了一些与权限相关的问题,可能是由于在 WSL 中运行 compose,然后尝试在 Windows/GitBash 中运行sai(反之亦然)。
  3. 最大的问题是我对 Docker WSL2 集成的误解,并且sai 命令应该在 WLS 中运行(来自 Laradock,我做了一些不正确的假设)。我需要安装一个 linux 发行版(我选择了 Ubuntu 20.x)并通过运行 wsl -s 确保它被设置为默认值。您可以使用 wsl -l -v 检查当前默认值。有关此设置的更多详细步骤,请参阅https://docs.microsoft.com/en-us/windows/wsl/install-win10#step-4---download-the-linux-kernel-update-package

一旦我修复了上述问题,我就可以打开 Windows 终端,创建一个 Ubuntu 选项卡,然后运行./vendor/bin/sail up它并执行。

于 2020-12-30T21:06:26.473 回答
0

对我来说,这是一个权限问题。作为 sudo 运行。

将 Win10 与 WSL Ubuntu 20.04 LTS 一起使用。

于 2021-03-26T19:59:22.700 回答
0

你需要先在windows下安装linux。你的答案是正确的。谢谢 :)

于 2021-01-16T15:59:22.660 回答
0

如果你像我一样从 GitHub 克隆了一个 Laravel 项目,其中应用程序的 Composer 依赖项都不可用,包括 Sail,你需要从项目目录运行以下命令。以下命令使用包含 PHP 和 Composer 的小型 Docker 容器来安装应用程序的依赖项:

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

更多信息可以在Laravel 文档中找到。

于 2021-07-31T08:31:53.977 回答
-5

这听起来可能很疯狂,但我遇到了同样的问题。

我已经做了vendor/bin/sail up

代替.vendor/bin/sail up

那行得通!

于 2021-08-12T04:28:15.777 回答