Add `entrypoint` routing, which supports routing string-based commands to different executables, with special logic for `pwsh`
@TravisEz13 がすでに取り組んでいます。
2020年3月27日 から。
評価
この issue はまだ評価されていません。
説明
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
--entrypointsyntax to specify an executable, and - split the
entrypoint(an argument to docker run) from its arguments (arguments to the container; they show up last).
- use the
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
- 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 "$@" - set that script as the
ENTRYPOINT - Set
CMDto[ "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 "$@"
- 主要言語
- Dockerfile
- スター
- 449
- フォーク
- 158
- 平均マージ
- 3日 10時間
- マージ済み PR(30日)
- 1
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
PowerShell/PowerShell-Docker のほかの issue
-
Git オープンIssue-Enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
PowerShell/PowerShell-Docker#857 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
PowerShell/PowerShell-Docker#856 · コメント 2 件 · リアクション 1 件 ·
-
Issue-Enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 48/100
PowerShell/PowerShell-Docker#854 ·
-
Issue-Enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
PowerShell/PowerShell-Docker#853 · コメント 6 件 · リアクション 17 件 ·
-
Issue-Enhancement
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
PowerShell/PowerShell-Docker#851 · コメント 2 件 · リアクション 2 件 ·