Докер + EmberCLI + Windows = Не работает - PullRequest
0 голосов
/ 27 марта 2019

Обзор системы

Я занимаюсь разработкой приложений в Ember и не могу обновить CLI до самой последней версии, поскольку старые приложения все еще находятся в разработке (версия 2.15).Но я хочу попробовать изменить некоторые части до 3,8.

Так как для этого мне нужен 3,8-CLI CLI, я попытался использовать для этого док-контейнер, чтобы я мог оставить рабочий CLI в моей системе (v2.15) нетронутым.

Я использую Docker Desktop CE V2.0.0.3 (31259) с Docker Engine 18.09.2.Пакет: «danlynn / ember-cli: 3.8.1».Я делаю все в PowerShell с повышенными правами.(Контейнеры linux запускаются в образе Moby в Hyper-V)

В моей системе нет другого контейнера, работающего во время этих тестов / решений проблем:

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 npm-bundled@1.0.5 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/myapp/node_modules/fsevents/node_modules/npm-bundled'
npm WARN rollback Rolling back os-homedir@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/myapp/node_modules/fsevents/node_modules/os-homedir'
...
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: 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" не будет работать.После некоторого времени запуска консоль просто говорит:

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. Я восстановил рабочий стол докера до заводских настроек по умолчанию.(это даже удалит каждое изображение)
  2. Я удалил весь докер для программного обеспечения Windows (которое даже удалило образ moby) - и переустановил его, недавно скачанный из концентратора докеров.
  3. Я удалилкаждый сетевой адаптер hyper-v перед переустановкой программного обеспечения CE док-станции.
  4. Я пытался использовать «чистый» контейнер док-станции узла 8 и вручную устанавливал в нем ember-cli@3.8.1 - но результат тот же.
  5. Я перезагружал Windows много раз.
  6. Я сбрасывал всю сеть Windows с помощью "netcfg -d".(что даже удалило все сохраненные ключи Wi-Fi и т. д.)

У меня просто нет вариантов, так как порт не используется - измените его, и он волшебным образом уже используется снова.Док-контейнеры могут открывать порты и использовать их: NGINX работает безупречно.Я предполагаю, что есть другая причина, препятствующая открытию портов nodeJS.

Любые советы?

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

У вас неверное предположение в вашем случае использования. Вам не нужно устанавливать ту же версию Ember CLI, которая используется в вашем проекте. На самом деле он всегда использует Ember CLI, установленный в проекте и определенный как package.json. Он использует только глобально установленный Ember CLI, если он выполняется вне проекта ember. В основном это используется для создания новых приложений (ember new) или дополнений (ember addon). Вы можете легко проверить эту функцию самостоятельно, распечатав версию использованного Ember CLI (ember -v) внутри проекта ember и по всему миру.

0 голосов
/ 01 апреля 2019

Этот образ докера уже запускает сервер 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

Внутри этого вы можете просто выполнить необходимые команды в среде контейнера.

...