Я надеялся протестировать новое расширение для удаленной разработки, используя функциональность Remote-Containers. Я взял образец Python и открыл его с помощью функции Remote-Containers: Open Folder in Container...
.
Процесс инициализации запускается нормально, без проблем проходя через некоторые сборки Docker. Шаги 1-3 в Dockerfile завершаются успешно, а затем шаг 4 (строки 13/14 в Dockerfile) вызывает исключение и завершается, поскольку команда RUN
включает в себя оператор AND_IF
(&&
). Это потому, что он передается в качестве подкоманды в PowerShell, которая не поддерживает &&
.
Я следовал инструкциям для подготовки моей системы к использованию функциональности Remote-Containers, включая добавление обоих моих дисков (C: и D :) к общим дискам.
Устранение неполадок, которые я пробовал до сих пор:
- переключение между контейнерами Linux и Windows
- обмен между PowerShell, Git Bash и WSL (Ubuntu) в качестве оболочки по умолчанию для визуального кода (
terminal.integrated.shell.windows
)
- с использованием одного из других примеров Remote-Container от Microsoft
- создание очень простого проекта с одним простым файлом Python и повторная попытка
Remote-Containers: Open Folder in Container...
, выбрав python:3
в качестве целевого образа Docker
Ни один из вышеперечисленных шагов не дал каких-либо других результатов.
Docker Inspect обнаруживает, что значение Config
-> Shell
:
"Shell":
[
"powershell",
"-Command",
"$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"
]
, в то время как значение Config
-> Cmd
равно:
"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 - 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
Это обычный опыт для кого-то еще? Буду признателен за любые решения или предложения по устранению неполадок в дальнейшем.