Не удается открыть папку с помощью Remote-Container из-за использования PowerShell для выполнения шагов сборки Dockerfile.

Я надеялся протестировать новое расширение удаленной разработки, используя функциональность удаленных контейнеров. Я взял образец проекта Python и открыл его с помощью функции Remote-Containers: Open Folder in Container....

Удаленные контейнеры: открыть папку в контейнере

Процесс инициализации запускается нормально, без проблем проходят некоторые этапы сборки Docker. Шаги 1-3 в файле Docker завершаются успешно, а затем шаг 4 (строки 13/14 файла Docker) вызывает исключение и завершает работу, поскольку команда RUN включает оператор AND_IF (&&). Это потому, что она передается в PowerShell как подкоманда, которая не поддерживает &&.

Я выполнил инструкции по подготовке моей системы к использованию функций удаленных контейнеров, включая добавление обоих моих дисков (C: и D :) к общим дискам.

Устранение неполадок, которые я пробовал до сих пор:

  • переключение между контейнерами Linux и Windows
  • переключение между PowerShell, Git Bash и WSL (Ubuntu) в качестве оболочки по умолчанию для Visual Code (terminal.integrated.shell.windows)
  • используя один из других примеров удаленного контейнера от Microsoft
  • создание очень простого проекта с одним простым файлом Python и повторная попытка Remote-Containers: Open Folder in Container..., выбрав python:3 в качестве целевого образа Docker

Ни один из вышеперечисленных шагов не дал других результатов.

Docker Inspect показывает, что параметр _9 _-> _ 10_:

"Shell":
  [
    "powershell",
    "-Command",
    "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"
  ]

а настройка _12 _-> _ 13_:

"Cmd":
  [
    "powershell",
    "-Command",
    "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';",
    "apt-get update     && apt-get -y install --no-install-recommends apt-utils 2>&1"
  ]

Полная конфигурация контейнера находится здесь.

Причина исключения очевидна, но я не могу понять, почему инструкция Dockerfile RUN передается в PowerShell, как указано выше.

Я использую Visual Studio Code - Insiders (1.36.0-insider) и Docker Engine 18.09.2 в Windows 10 (1809).

Исключение вызывает следующую ошибку, когда шаг 4 терпит неудачу (я включил предыдущие успешные шаги для контекста; для краткости сгладил установку pip на шаге 2):

Setting up container for folder: d:\Development\vscode-remote-try-python-master
Run: docker build -f d:\Development\vscode-remote-try-python-master\.devcontainer\Dockerfile -t vsc-vscode-remote-try-python-master-486294f4d73f25a657ec08f53ff07d5f d:\Development\vscode-remote-try-python-master
Sending build context to Docker daemon  24.06kB
Step 1/13 : FROM python:3
 ---> 22a423a5db36
Step 2/13 : RUN pip install pylint
 ---> Running in 23380af29dd1
Successfully installed astroid-2.2.5 colorama-0.4.1 isort-4.3.20 lazy-object-proxy-1.4.1 mccabe-0.6.1 pylint-2.3.1 six-1.12.0 typed-ast-1.4.0 wrapt-1.11.1
Removing intermediate container 23380af29dd1
 ---> 5569fa48c9c5
Step 3/13 : ENV DEBIAN_FRONTEND=noninteractive
 ---> Running in 941086f674cb
Removing intermediate container 941086f674cb
 ---> b8b2fd47bdb1
Step 4/13 : RUN apt-get update     && apt-get -y install --no-install-recommends apt-utils 2>&1
 ---> Running in defcc073adcf
At line:1 char:91
+ ... ; $ProgressPreference = 'SilentlyContinue'; apt-get update && apt-get ...
+                                                                ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordEx 
   ception
    + FullyQualifiedErrorId : InvalidEndOfLine

The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; apt-get update     && apt-get -y install --no-install-recommends apt-utils 2>&1' returned a non-zero code: 1
Failed: Building an image from the Dockerfile.
Command failed: C:\Program Files\Docker\Docker\Resources\bin\docker.exe build -f d:\Development\vscode-remote-try-python-master\.devcontainer\Dockerfile -t vsc-vscode-remote-try-python-master-486294f4d73f25a657ec08f53ff07d5f d:\Development\vscode-remote-try-python-master

Это обычный опыт для кого-то еще? Буду признателен за любые решения или предложения по дальнейшему устранению неполадок.


person jxm    schedule 14.06.2019    source источник


Ответы (1)


Эта проблема, по-видимому, возникает из-за использования контейнеров Windows, как описано в этой проблеме GitHub < / а>.

Да, к сожалению, контейнеры Windows не поддерживаются, и использование LCOW в «режиме контейнеров Windows» для Docker Desktop не является чем-то, что мы действительно поддерживаем прямо сейчас, учитывая его экспериментальное состояние.

В LCOW все еще есть пробелы, такие как поддержка монтирования привязки одного файла, что может вызвать проблемы, и такие вещи, как PostgreSQL, называются еще не работающими. См. здесь и здесь.

Windows сейчас рекомендует в первую очередь использовать LCOW в порядке исключения:

Когда использовать Moby VM

Прямо сейчас мы рекомендуем метод Moby VM для запуска контейнеров Linux людям, которые:

  • Хотите стабильную контейнерную среду. Это Docker для Windows по умолчанию.
  • Запускайте контейнеры Windows или Linux, но редко и то, и другое одновременно.
  • У вас есть сложные или нестандартные сетевые требования между контейнерами Linux.
  • Не требуется изоляция ядра (изоляция Hyper-V) между контейнерами Linux.

Когда использовать LCOW

Сейчас мы рекомендуем LCOW людям, которые:

  • Хотите протестировать нашу новейшую технологию.
  • Одновременно запускайте контейнеры Windows и Linux.
  • Требуется изоляция ядра (изоляция Hyper-V) между контейнерами Linux.
person jxm    schedule 02.07.2019