为啥“起航”命令没有构建我的 laravel docker 容器?
Posted
技术标签:
【中文标题】为啥“起航”命令没有构建我的 laravel docker 容器?【英文标题】:Why is the "sail up" command not building my laravel docker containers?为什么“起航”命令没有构建我的 laravel docker 容器? 【发布时间】:2021-04-03 02:40:13 【问题描述】:我正在试用 Laravel Sail,因为我已经成功使用 Laradock 几年了,并希望简化我的开发环境设置。我在 Windows 10 64 上,使用 WSL 2 安装了 Docker Desktop 3.0,我的 Laravel 应用正在运行 Laravel 8.20.1。
在我的 Laravel 项目中,我遵循了 Laravel Sail setup guide:我运行了 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
更新:我通过 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
\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"]
【问题讨论】:
尝试删除您的vendor
目录并运行composer update
。
谢谢@Qumber。我试过了,它让我更进一步。我没有这4个错误。现在,当我从 PowerShell 运行“./vendor/bin/sail up”时,我会收到“你想如何打开这个文件”提示。原谅我的无知,但我不确定实际上应该运行什么。我有 PHP 7.4 CLI 和 Docker Desktop 3 正在运行,以防万一。
你能和我们分享一下 Dockerfile 和 docker-compose 吗?另外,您能否在 Ubuntu 终端中尝试相同的操作,如果有任何不同?
@Qumber 我已经为你附上了上面的文件。
你试过从 WSL2 运行 ./vendor/bin/sail up
吗?
【参考方案1】:
这听起来可能很疯狂,但我遇到了同样的问题。
我刚刚做了vendor/bin/sail up
而不是.vendor/bin/sail up
这成功了!
【讨论】:
【参考方案2】:如果你像我一样从 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 documentation。
【讨论】:
【参考方案3】:对我来说,这是一个权限问题。作为 sudo 运行。
在 WSL Ubuntu 20.04 LTS 中使用 Win10。
【讨论】:
【参考方案4】:你需要先在windows下安装linux。你的答案是正确的。谢谢:)
【讨论】:
【参考方案5】:好的,我需要在这里解决很多问题。
-
@Qumber 最初通过建议我擦除 /vendor/ 并再次运行 composer install/update 来帮助我。这修复了由于某种原因没有添加的缺失的sails 文件。
我还遇到了一些与权限相关的问题,可能是由于在 WSL 中运行 compose,然后尝试在 Windows/GitBash 中运行sai(反之亦然)。
最大的问题是我对 Docker WSL2 集成的误解,认为sail 命令应该在 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
并执行。
【讨论】:
我发现从 Windows 终端运行与从 PowerShell 运行 WSL 相比,会产生非常不同(而且更好)的结果。前者似乎设置了所有正确的权限,而后者没有。我认为这与不同终端如何在 Windows 和主机 Linux 操作系统之间安装文件系统有关,但存在一些我无法深入了解的潜在差异。根据我的经验,Windows 终端是必经之路。 谢谢。将默认发行版更改为 Debian(或 Ubuntu)为我做到了 谢谢。我在 Windows 终端上运行命令并收到消息“没有这样的文件或目录”。在 WSL2 终端中运行它们后,一切正常。以上是关于为啥“起航”命令没有构建我的 laravel docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 7:为啥我的会话 cookie 没有在浏览器中设置?