PowerShell / PowerShell/PowerShell-Docker

Add `entrypoint` routing, which supports routing string-based commands to different executables, with special logic for `pwsh`

Abierto
#398 13 comentarios 0 reacciones 1 asignado Ver en GitHub

@TravisEz13 ya está trabajando en esto.

Desde el 27/3/2020.

Breaking Change Committee-Reviewed Issue-Enhancement
Lenguaje dominante
Dockerfile
Estrellas
449
Forks
158
Merge medio
3 d 10 h
PR fusionados (30 d)
1

Descripción

Goal

Add entrypoint routing, which supports routing string-based commands to different executables, with special logic for pwsh. In order to:

  • Provide actionable error messages. Users should know that the entrypoint syntax they used failed in PowerShell, in Bash (or other shell), or in the script itself.
  • Support on Linux and Windows (a number of these appear like general concerns, not Linux-specific).
  • This avoids needing to
    • use the --entrypoint syntax to specify an executable, and
    • split the entrypoint (an argument to docker run) from its arguments (arguments to the container; they show up last).

Background

The best practice in docker is for an image to run the product in contains.
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint

Currently our images only run PowerShell when no command is specified. This is specified in the CMD entry in the Dockerfile.

Unfortunately, making the change causes a breaking change to the image in what is hopefully a corner case.

Customer requests for this are in #274 and #394

Proof of concept is here: https://github.com/PowerShell/PowerShell-Docker/pull/399

Other Language images
  • Work similar to the proposal
    • php
    • node
  • Like our current image
    • perl (perldebug)
    • python
  • Dumps you in bash
    • golang

Proposal

  1. Add a shell script that will detect if you are running pwsh (or similar), if so, send it to bash, otherwise run pwsh -nologo -l -c "$@"
  2. set that script as the ENTRYPOINT
  3. SetCMD to [ "pwsh" ]
  • Maintain the most features
  • Achieves the goals of the best practices
New Scenario

Note the lack of pwsh -c.

docker  run --rm  mcr.microsoft.com/powershell:7.1.0-preview.1-ubuntu-18.04 '$psversiontable.PSVersion.ToString()'
Will continue to work
docker  run --rm  mcr.microsoft.com/powershell:7.1.0-preview.1-ubuntu-18.04 pwsh -c '$psversiontable.PSVersion.ToString()'

Breaking change

Scenario - Running PowerShell using container
Working command with current images
docker  run --rm  mcr.microsoft.com/powershell:7.1.0-preview.1-ubuntu-18.04 /opt/microsoft/powershell/7-preview/pwsh -c '$psversiontable.PSVersion.ToString()'
Scenario - Expected result (with current image)
7.1.0-preview.1
Actual result (with private build with change)
ParserError: 
Line |
   1 |  7.1.0-preview.1
     |       ~~~~~~~~
     | Unexpected token '-preview' in expression or statement.
Workaround

Use --% to prevent the new PowerShell entrypoint from parsing the command.

docker  run --rm  mcr.microsoft.com/powershell:7.1.0-preview.1-ubuntu-18.04 /opt/microsoft/powershell/7-preview/pwsh --% -c '$psversiontable.PSVersion.ToString()'
Entry point script - Ubuntu
#!/bin/sh
set -e

# first arg is `pwsh` or similar
if ! { [ $1 = 'pwsh' ] || [ $1 = 'pwsh-preview' ]; }; then
 set -- pwsh -nologo -l -c "$@"
fi

exec "$@"

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.