14

$PS1コンテナに環境変数を設定したい。マルチレベルまたは複雑な Docker 環境のセットアップを識別するのに役立ちます。現在、docker コンテナーは次のプロンプトを表示します。

root@container-id# 

次のように変更できれば、$PS1プロンプト自体を見てコンテナーを特定できます。

[Level-1]root@container-id# 

$PS1自作の画像( Dockerfile)やファイルなどを作ってエクスポートして実験しました.profileが反映されません。

4

10 に答える 10

7

このDockerfileは次のように設定PS1します。

RUN echo 'export PS1="[\u@docker] \W # "' >> /root/.bash_profile
于 2014-11-03T12:58:19.620 に答える
3

複雑なコンテナ ビルドの入力と出力を追跡するために、同様の手法を使用します。

https://github.com/ianmiell/shutit/blob/master/shutit_global.py#L1338

この行は、docker/(p)expect の組み合わせを扱う苦労して得た経験の成果を表しています。

"SHUTIT_BACKUP_PS1_%s=$PS1 && PS1='%s' && unset PROMPT_COMMAND"

元に戻したい場合は、プロンプトをバックアップすると便利です。PS1 を PS1= で設定すると、PS1 が設定されます。PROMPT_COMMAND を設定解除すると、端末がリセットされるなどの厄介な問題が解消されます。

(ビルドではなく) コンテナーを実行するときに確実に設定する方法について質問がある場合は、コンテナーの実行方法に応じて、.bashrc / .profile ファイルに何かを追加する必要がある場合があります。私の知る限り、dockerfile ディレクティブでそれを保証して永続化する方法はありません。

于 2014-11-04T07:42:26.393 に答える
1

通常、Dockerfile のユーザーが誰であるかに応じて、/home/USER/.bashrc または /root/.bashrc を作成します。それはうまくいきます。私はもう試した

ENV PS1 '# ' 

しかし、それは私にとってはうまくいきませんでした。

于 2014-11-01T20:48:52.007 に答える
1

debian 9 では、bash を実行するために、これが機能しました。

RUN echo 'export PS1="[\$ENV_VAR] \W # "' >> /root/.bashrc

通常はルートとして実行されており、docker を使用していることは一般的にわかっているため、コンテナーが何であるかを示すプロンプトが必要だったので、環境変数を使用しました。そして、私が使用するbashは.bashrcを優先的にロードすると思います。

于 2019-11-26T15:50:32.960 に答える
0

.profileではなくで設定する必要があり.bashrcます。

.profileルートまたはホームから開きPS1='\u@\h:\w\$ 'PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '必要なものに置き換えるだけです。

コンテナを再起動する必要があることに注意してください。

于 2015-10-17T04:56:46.793 に答える
0

以下のソリューションでは、DockerfileUSERを使用して非ルート Linux ユーザーを Bash に設定したことを前提としています。


成功しなかったかもしれないこと:

ENV PS1='[docker]$' ## may not work

対話型シェルの起動時に、既存の.bashrcのデフォルト設定によって値が上書きされる可能性があるため、ENV設定に使用すると失敗する可能性があります。一部の Linux ディストリビューションは意見が分かれており、ユーザーごとに最初の .bashrc に設定されています (たとえば、Ubuntu はこれを行います)。PS1PS1

修正は、Dockerfile を変更して、ユーザーの .bashrc の最後に目的の値を設定することです。これにより、スクリプト内の以前の設定が上書きされます。

FROM ubuntu:20.04
# ...
USER myuser ## the username
RUN echo "PS1='\n[ \u@docker \w ]\n$ '" >>.bashrc
于 2021-09-01T05:10:04.620 に答える