Acabo de comenzar el tutorial de Docker y después de la descarga y seguí el comando en la página de inicio oficial que

PS C:\COCcal> cat > Dockerfile <<EOF
>> FROM busybox
>> CMD echo "Hello world! This is my first Docker image."
>> EOF

Me da

At line:1 char:19
+ cat > Dockerfile <<EOF
+                   ~
Missing file specification after redirection operator.
At line:1 char:18
+ cat > Dockerfile <<EOF
+                  ~
The '<' operator is reserved for future use.
At line:1 char:19
+ cat > Dockerfile <<EOF
+                   ~
The '<' operator is reserved for future use.
At line:2 char:1
+ FROM busybox
+ ~~~~
The 'from' keyword is not supported in this version of the language.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingFileSpecification

Este error. Busqué un mensaje de error en Google pero no puedo encontrar el mismo caso conmigo. ¿Falta alguna configuración? o qué tengo que hacer para trabajar esos comandos? Te lo agradezco de antemano.

0
Juno J 25 feb. 2020 a las 19:07

2 respuestas

La mejor respuesta

Parece que está ejecutando comandos de shell de Linux dentro de PowerShell. Dependiendo de su configuración, eso podría ser problemático. Sugeriría abrir un shell de Linux o usar comandos compatibles con 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]:

Cuando ejecute el comando anterior, se le solicitarán Value[0], Value[1], etc. (siempre que presione Entrar después de ingresar datos en cada línea) hasta que presione Entrar en una línea sin ninguna otra entrada. Cada una de esas entradas estará en una línea separada en Dockerfile.

Con respecto a Redirection operadores en PowerShell, solo se admiten >, >> y >&1. Si cat funciona, es porque es un alias. Puede ejecutar Get-Alias cat para ver a qué comando se asigna. En mi sistema, eso es Get-Content.


Hay otras formas de PowerShell para realizar esta tarea, siempre que no necesite tener la misma experiencia que brindan los comandos de Linux. A continuación se muestra solo un ejemplo.

$Content = @'
line 1 stuff
line 2 stuff
line 3 stuff
'@
$Content | Set-Content -Path Dockerfile

Vea a continuación la salida con codificación UTF8NoBOM.

$Content = @'
line 1 stuff
line 2 stuff
line 3 stuff
'@
[IO.File]::WriteAllLines('C:\COCcal\Dockerfile',$Content,[Text.UTF8Encoding]::new($false))

No puedo hablar por ejecutar esta configuración de Docker con respecto a Docker. Por lo tanto, podría haber algunas cosas a tener en cuenta al intentar ejecutar los comandos nativos de PowerShell.

  1. Si Dockerfile requiere que ciertos caracteres de fin de línea estén presentes, Establecer contenido puede usar alguna combinación de retornos de carro y caracteres de nueva línea en cada línea que a Docker no le gusta.
  2. Docker puede esperar una cierta codificación de Dockerfile. Si bien Set-Content ofrece el parámetro -Encoding, aún puede no proporcionar lo que necesita. Por ejemplo, podría usar -Encoding UTF8. En Windows PowerShell, será UTF8 con BOM (no hay una opción Sin BOM con este comando en Windows PowerShell). La codificación predeterminada en Windows PowerShell será Default, que probablemente sea ANSI. En PowerShell Core, la codificación predeterminada es UTF8NoBOM.
1
AdminOfThings 25 feb. 2020 a las 17:26

No hay operador << en PowerShell. cat podría ser un alias para get-content.

-1
js2010 25 feb. 2020 a las 16:40