Docker + EmberCLI + Windows =无效

问题描述 投票:0回答:2

系统总览

我正在使用Ember开发应用程序,由于较旧的应用程序仍处于开发阶段(版本2.15),因此无法将CLI更新到最新版本。但我想尝试重构一些部分来实现3.8。

因为我需要一个3.8 ember CLI,所以我尝试使用一个docker容器,这样我就可以保持我系统上的工作CLI(v2.15)不受影响。

我使用Docker Desktop CE V2.0.0.3(31259)和Docker Engine 18.09.2。该软件包是:“danlynn / ember-cli:3.8.1”。我正在使用提升权限在PowerShell中执行所有操作。 (Linux容器在Hyper-V中的Moby映像中运行)

在我的系统上,在这些测试/解决问题期间没有其他容器在运行:

PS C:\docker_ember> docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
PS C:\docker_ember>

什么工作?

当我运行带有bash的容器以便能够使用ember CLI时,一切正常 - 甚至“npm i”和“ember build”:

PS C:\docker_ember> docker run --rm -ti -v ${PWD}:/myapp -p 4200:4200 -p 7020:7020 -p 7357:7357 danlynn/ember-cli:3.8.1 bash


root@a39fe0269e04:/myapp# npm i
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/myapp/node_modules/fsevents/node_modules/npm-bundled'
npm WARN rollback Rolling back [email protected] failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/myapp/node_modules/fsevents/node_modules/os-homedir'
...
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

audited 64805 packages in 61.406s
found 1 low severity vulnerability
  run `npm audit fix` to fix them, or `npm audit` for details


root@a39fe0269e04:/myapp# ember build
Environment: development

ember38/templates/index.hbs
  2:4  error  Incorrect indentation for `<div>` beginning at L2:C4. Expected `<div>` to be at an indentation of 2 but was found at 4.  block-indentation
  3:8  error  Incorrect indentation for `{{target.id}}` beginning at L3:C8. Expected `{{target.id}}` to be at an indentation of 6 but was found at 8.  block-indentation

===== 1 Template Linting Error

cleaning up...
Built project successfully. Stored in "dist/".


root@a39fe0269e04:/myapp#

什么不起作用?

但问题是,我无法找到它的原因:“ember server”/“ember s”将无效。在一些开始时间之后,控制台就是sais:

Port 4200 is already in use.

但事实并非如此。我检查了窗口和容器中的每个端口 - 它是免费的。我甚至将.ember-cli配置文件中的端口更改为其他端口,甚至没有离开容器(我试过> 10) - 所有都在“使用中”。

我尝试了docker命令的其他变种 - 即使没有任何端口暴露:

docker run --rm -ti -v ${PWD}:/myapp -p 4200:4200 -p 7020:7020 -p 7357:7357 danlynn/ember-cli:3.8.1 bash

docker run --rm -ti -v ${PWD}:/myapp -p 4200:4200 -p 7020:7020 -p 7357:7357 --add-host=localhost:172.18.80.177 danlynn/ember-cli:3.8.1 bash

docker run --rm -ti -v ${PWD}:/myapp --network="host" danlynn/ember-cli:3.8.1 bash

docker run --rm -ti -v ${PWD}:/myapp --net=host --pid=host --privileged danlynn/ember-cli:3.8.1 bash

docker run --rm -ti -v ${PWD}:/myapp -p 4200 -p 7020 -p 7357 danlynn/ember-cli:3.8.1 bash

# This one replaces the bash with a real ember CLI command.
docker run --rm -ti -v ${PWD}:/myapp -p 4200:4200 -p 7020:7020 -p 7357:7357 danlynn/ember-cli:3.8.1 ember s

所以我尝试了一些其他容器,打开端口 - NGINX:

PS C:\docker_ember> docker run --rm -ti -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
27833a3ba0a5: Pull complete
e83729dd399a: Pull complete
ebc6a67df66d: Pull complete
Digest: sha256:dff6326b09c76bef1425ee64c2e218b38737cdb5412b8ccf84ca70740bfa1db2
Status: Downloaded newer image for nginx:latest
172.17.0.1 - - [27/Mar/2019:07:46:05 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "-"
2019/03/27 07:46:06 [error] 8#8: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
172.17.0.1 - - [27/Mar/2019:07:46:06 +0000] "GET /favicon.ico HTTP/1.1" 404 556 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "-"
^C

PS C:\docker_ember>

它只是完美无瑕地工作。

我有什么办法解决这个问题?

  1. 我将docker desktop重置为出厂默认值。 (这甚至会删除每张图片)
  2. 我卸载了Windows软件的整个docker(甚至删除了moby图像) - 并重新安装它,刚从docker hub下载。
  3. 在重新安装docker桌面CE软件之前,我删除了每个hyper-v网络适配器。
  4. 我试图使用一个“纯”节点8泊坞容器,并在其中手动安装[email protected] - 但结果相同。
  5. 我多次重启Windows。
  6. 我使用“netcfg -d”重置了整个Windows网络。 (甚至删除了每个保存的wifi密钥等)

我只是没有选择,因为端口没有使用 - 改变它,它已经神奇地使用了AGAIN。 docker容器能够打开端口并使用它们:NGINX可以完美地工作。我想,还有一些其他原因阻止了nodeJS端口被打开。

有小费吗?

windows docker ember.js ember-cli docker-windows
2个回答
2
投票

您的用例中有一个错误的假设。您不需要在项目中使用全局安装的Ember CLI版本。实际上它始终使用安装在项目中的Ember CLI,并由它的package.json定义。如果在ember项目之外执行,它仅使用全局安装的Ember CLI。这主要用于创建新应用程序(ember new)或插件(ember addon)。您可以通过在ember项目中全局打印出使用过的Ember CLI(ember -v)版本来轻松验证该功能。


0
投票

该docker镜像已经直接运行ember服务器,因此您可能尝试两次运行ember服务器。如果你检查dockerfile https://github.com/danlynn/ember-cli/blob/3.8.1/Dockerfile#L11该行指定如果你运行没有任何参数的图像将运行ember服务器。

如果在启动后运行带有名称的图像,则可以附加到容器:

$ docker run --name myapp --rm -ti -v $(pwd):/myapp -p 4200:4200 -p 7020:7020 -p 7357:7357 danlynn/ember-cli:3.8.1

附加到运行ember服务器的容器:

$ docker exec -it myapp bash

在内部,您可以在容器环境中执行所需的命令。

© www.soinside.com 2019 - 2024. All rights reserved.