Похоже, вы запускаете Linux команды оболочки внутри PowerShell. В зависимости от вашей конфигурации это может быть проблематично c. Я бы предложил открыть оболочку Linux или использовать команды, которые поддерживаются PowerShell.
# Run the Set-Content Command Below
Set-Content -Path Dockerfile
# After Running the above command, I am prompted to enter data:
Value[0]: FROM busybox
Value[1]: CMD echo "Hello world! This is my first Docker image."
Value[2]:
Когда вы запустите указанную выше команду, вам будет предложено ввести Value[0]
, Value[1]
, et c. (при условии, что вы нажимаете Enter после ввода данных в каждой строке), пока вы не нажмете Enter в строке без какого-либо другого ввода. Каждый из этих входов будет находиться на отдельной строке в Dockerfile
.
Что касается операторов Перенаправление в PowerShell, поддерживаются только >
, >>
и >&1
. Если cat
работает вообще, это потому, что это псевдоним. Вы можете запустить Get-Alias cat
, чтобы увидеть, к какой команде он относится. В моей системе это Get-Content
.
Существуют и другие способы PowerShell для выполнения sh этой задачи, если вам не требуется такой же опыт, какой дают команды Linux. Ниже приведен только один пример.
$Content = @'
line 1 stuff
line 2 stuff
line 3 stuff
'@
$Content | Set-Content -Path Dockerfile
См. Ниже для вывода с кодированием UTF8NoBOM
.
$Content = @'
line 1 stuff
line 2 stuff
line 3 stuff
'@
[IO.File]::WriteAllLines('C:\COCcal\Dockerfile',$Content,[Text.UTF8Encoding]::new($false))
Я не могу говорить для запуска этой конфигурации Docker с уважение к Docker. Таким образом, при запуске собственных команд PowerShell можно учитывать некоторые моменты.
- Если для
Dockerfile
требуется наличие определенных символов конца строки, Set-Content может используйте некоторую комбинацию возврата каретки и символов новой строки в каждой строке, которая не нравится Docker. - Docker может ожидать определенную кодировку
Dockerfile
. Хотя Set-Content
предлагает параметр -Encoding
, он все равно может не обеспечивать то, что вам нужно. Например, вы можете использовать -Encoding UTF8
. В Windows PowerShell это будет UTF8 с спецификацией (для этой команды в Windows PowerShell опция «Нет спецификации» отсутствует). Кодировка по умолчанию в Windows PowerShell будет Default
, что вероятно ANSI
. В PowerShell Core кодировкой по умолчанию является UTF8NoBOM
.