通常、ドッカーインスタンスに接続すると、次のような非常に原始的な状況docker exec
に陥ります。sh
ash
より良いことが必要な場合は、dockerインスタンスに直接インストールする必要があります。
しかし、私が正しく見ると、シェルで私が望むのは、バイナリを実行してstdinとstdoutをリダイレクトするだけです。シェルが自分のホストコンピュータに存在し、pwd
ドッカーコンテナに対する権限があり、ドッカーコンテナと自分のホストのバイナリにアクセスできることは不可能ですか?
これは純粋に開発/デバッグ目的であるため、これを達成するためにセキュリティ機能を無効にする必要がある場合は許可されます。
これは簡単なことですか?そうでなければ、主な障害物は何ですか?
答え1
あなたの質問を正しく理解したら、ホストシステムと同様に、Dockerコンテナで同じシェルと同じ設定を使用したいと思います。
ボリュームを使って実際に組み合わせることができますが、100%正しく動作させるのは難しくて混乱します。これをインストールし、ホストから設定をコピーすることをお勧めします。
ホストがシェルとして使用され、bash
Ubuntuベースのイメージから作成されたコンテナを使用しようとしているとします。foo:latest
この場合、次のように生成できますDockerfile
。
FROM foo:latest
RUN apt-get update && apt-get -y install bash
COPY .bashrc /root/.bashrc
COPY .profile /root/.profile
今:
- ディレクトリの作成
newimage
.bashrc
homedirから.profile
このディレクトリにコピーします。- このディレクトリに移動して実行します。
docker build -t foo:withbash
foo:withbash
これでbashと同じイメージが作成されますが、foo:latest
ホストシステムのbash構成もあります。
(他のシェル、Centos、その他のディストリビューションでも同じトリックを使用できますが、zsh
Dockerfileのコマンドは少し異なります。)
編集する: いくつかの注意:
- 私のdockerfileはあなたがコンテナのルートであると仮定します(通常はそうです)。このコンテナのルートでない場合は、これらのファイルが正しいディレクトリにコピーされるように、最後の2行を変更する必要があります。
- 2行目は、Debian、Ubuntu、または同様のディストリビューションに基づくすべてのDockerイメージに適用されます。
CentOSまたは同様のディストリビューションに基づいている場合は、次のことをしたいと思います。yum -y update && yum -y install bash
Alpineに基づいている場合は、次のようになります。RUN apk add --no-cache bash
- zshを行2と3
bash
に変更するにはzsh