如何在 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 test
或 vendor/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
我可以用两种方式完成最后一段中的过程。
- 我可以在
//wsl$/Ubuntu/home/{USER}/dev/gitlab.our-company.com/laravel-backend
中打开 VS Code 集成终端并直接在那里执行上述过程,或者
- 作为一个额外的步骤,在终端中,我可以执行
wsl
命令并且我的位置变为 ~/dev/gitlab.our-company.com/laravel-backend
,然后再继续上述过程。
在这两种情况下,我的 php artisan test
提高了速度。
哪个是正确的,或者出于某种原因更好?
问题
我遇到了 yarn
的问题,所以在 Ubuntu 中 Windows 我安装了 nvm
,然后 nodejs
、npm
, 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}"
问题可能格式不正确,但让我解释一下。
初始设置
我在 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
然后我用
打开容器的bashdocker-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 test
或 vendor/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
我可以用两种方式完成最后一段中的过程。
- 我可以在
//wsl$/Ubuntu/home/{USER}/dev/gitlab.our-company.com/laravel-backend
中打开 VS Code 集成终端并直接在那里执行上述过程,或者
- 作为一个额外的步骤,在终端中,我可以执行
wsl
命令并且我的位置变为~/dev/gitlab.our-company.com/laravel-backend
,然后再继续上述过程。
在这两种情况下,我的 php artisan test
提高了速度。
哪个是正确的,或者出于某种原因更好?
问题
我遇到了 yarn
的问题,所以在 Ubuntu 中 Windows 我安装了 nvm
,然后 nodejs
、npm
, 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}"