如何在 Windows 10 中使用 WSL 2 正确 运行 Docker 容器和 YARN 服务器?

How to properly run Docker containers and YARN server with WSL 2 in Windows 10?

问题可能格式不正确,但让我解释一下。

初始设置

我在 C:\dev\gitlab.our-company.com\laravel-backend 中有我的网络开发 Laravel 项目,在 .\public\vue-frontend 中有一个 Vue 应用程序。

我使用 Docker(使用基于 WSL 2 的引擎)和以下命令:

// First time
export AUTH_TOKEN='glpat-XXX'
export COMPOSER_AUTH='{"http-basic":{"gitlab.our-company.com": {"username": "oauth2", "password": "${AUTH_TOKEN}"}}}'
docker build -f deployment/app.Dockerfile --build-arg COMPOSER_AUTH -t laravel_backend_app .
docker build -f deployment/web.Dockerfile --build-arg AUTH_TOKEN -t laravel_backend_web .
// Always
docker-compose -f deployment/docker-compose.yml -f deployment/docker-compose.override.yml -p laravel_backend up

然后我用

打开容器的bash
docker-compose -f deployment/docker-compose.yml -f deployment/docker-compose.override.yml -p laravel_backend exec app bash

这又让我可以 运行 php artisan test.

我也可以运行

yarn --cwd ./public/vue-frontend/ install && yarn --cwd ./public/vue-frontend/ serve

为前端服务。

我为什么要进行更改

运行 php artisan testvendor/bin/grumphp run 在容器的 bash 中慢得离谱 (x10)。

当前设置

$ wsl docker --version
Docker version 20.10.12, build e91ed57

使用 Ubuntu for Windows with explorer.exe . 我将整个 C:\dev 复制到 (Ubuntu)~/dev

我重建了 Docker 个容器并 up 编辑了它们,执行了 app bash 并尝试了 php artisan test。现在快如闪电。

问题 1

我可以用两种方式完成最后一段中的过程。

  1. 我可以在 //wsl$/Ubuntu/home/{USER}/dev/gitlab.our-company.com/laravel-backend 中打开 VS Code 集成终端并直接在那里执行上述过程,或者
  1. 作为一个额外的步骤,在终端中,我可以执行 wsl 命令并且我的位置变为 ~/dev/gitlab.our-company.com/laravel-backend,然后再继续上述过程。

在这两种情况下,我的 php artisan test 提高了速度。

哪个是正确的,或者出于某种原因更好?

问题

我遇到了 yarn 的问题,所以在 Ubuntu 中 Windows 我安装了 nvm,然后 nodejsnpm , yarn.

两种情况下都安装了 Yarn,认为版本略有不同。

//wsl$/Ubuntu/home/{USER}/dev/gitlab.our-company.com/laravel-backend (205-issue-title)
$ yarn --version
1.22.17
$ wsl
{USER}@DESKTOP-NAME:~/dev/gitlab.our-company.com/laravel-backend$ yarn --version
1.22.15

现在问题出在应用程序服务上。

//wsl$/Ubuntu/home/{USER}/dev/gitlab.our-company.com/laravel-backend (205-issue-title)
$ yarn --cwd ./public/vue-frontend/ install && yarn --cwd ./public/vue-frontend/ serve
yarn install v1.22.17
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
[-/3] ⡀ waiting...
[2/3] ⡀ ejs
error \wsl$\Ubuntu\home\{USER}\dev\gitlab.our-company.com/laravel-backend\public\vue-frontend\node_modules\yorkie: Command failed.
Exit code: 1
Command: node bin/install.js
Arguments:
Directory: \wsl$\Ubuntu\home\{USER}\dev\gitlab.our-company.com/laravel-backend\public\vue-frontend\node_modules\yorkie  
Output:
'\wsl$\Ubuntu\home\{USER}\dev\gitlab.our-company.com/laravel-backend\public\vue-frontend\node_modules\yorkie'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module 'C:\Windows\bin\install.js'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []

wsl:

{USER}@DESKTOP-3OMP0G1:~/dev/gitlab.our-company.com/laravel-backend$ yarn --cwd ./public/vue-frontend/ install && yarn --cwd ./public/vue-frontend/ serve
yarn install v1.22.15
[1/4] Resolving packages...
[2/4] Fetching packages...
error An unexpected error occurred: "https://gitlab.our-company.com/api/v4/projects/{PROJECT_ID}/packages/npm/@our-company/case-messaging/-/@our-company/case-messaging-1.0.3.tgz: Request failed \"404 Not Found\"".
info If you think this is a bug, please open a bug report with the information provided in "/home/{USER}/dev/gitlab.our-company.com/laravel-backend/public/vue-frontend/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

我现在相信第二种方式,即。在 wsl 中是正确的方法。

如果有人有更深入、更好或不同的解释,我会对其进行审核,并可能将其标记为已接受的答案。

我在 wsl 中遇到的 运行 yarn install 的问题与问题有点无关,是由驻留在我们公司自托管的 GitLab 中的 NPM 包引起的(相反NPM public 注册表)和 npm 无权下载 case-messaging 包。

解决了
npm config set @our-company:registry https://gitlab.our-company.com/api/v4/projects/{PROJECT_ID}/packages/npm/
npm config set -- '//gitlab.our-company.com/api/v4/projects/{PROJECT_ID}/packages/npm/:_authToken' "${AUTH_TOKEN}"