为什么 "sail up" 命令没有构建我的 laravel docker 容器?

Why is the "sail up" command not building my laravel docker containers?

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

在我的 Laravel 项目中,我遵循了 Laravel Sail setup guide:我有 运行 composer require laravel/sail --devphp 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

------------请求的附件--------------------

docker-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

Docker文件在\vendor\laravel\sail\runtimes.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"]

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

  1. @Qumber 最初帮助我建议我再次擦除 /vendor/ 和 运行 composer install/update。这修复了由于某种原因未添加的丢失的 sail 文件。
  2. 我也遇到了一些与权限相关的问题,可能是由于 运行 在 WSL 中编写,然后尝试 运行 在 Windows/GitBash 中航行(反之亦然)。
  3. 最大的问题是我对 Docker WSL2 集成的误解,认为 sail 命令应该是来自 WLS 内部的 运行(来自 Laradock,我做了一些不正确的假设)。我需要安装一个 linux 发行版(我选择了 Ubuntu 20.x)并通过 运行ning 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 并执行。

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

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

在 WSL 中使用 Win10 Ubuntu 20.04 LTS。

如果您像我一样从 GitHub 克隆了一个 Laravel 项目,其中 none 应用程序的 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 documentation 上找到更多信息。

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

我刚刚做了vendor/bin/sail up

而不是.vendor/bin/sail up

成功了!