自分のホストコンピュータのシェル(カスタムエントリを含む)をDockerインスタンスで使用できますか?

自分のホストコンピュータのシェル(カスタムエントリを含む)をDockerインスタンスで使用できますか?

通常、ドッカーインスタンスに接続すると、次のような非常に原始的な状況docker execに陥ります。shash

より良いことが必要な場合は、dockerインスタンスに直接インストールする必要があります。

しかし、私が正しく見ると、シェルで私が望むのは、バイナリを実行してstdinとstdoutをリダイレクトするだけです。シェルが自分のホストコンピュータに存在し、pwdドッカーコンテナに対する権限があり、ドッカーコンテナと自分のホストのバイナリにアクセスできることは不可能ですか?

これは純粋に開発/デバッグ目的であるため、これを達成するためにセキュリティ機能を無効にする必要がある場合は許可されます。

これは簡単なことですか?そうでなければ、主な障害物は何ですか?

答え1

あなたの質問を正しく理解したら、ホストシステムと同様に、Dockerコンテナで同じシェルと同じ設定を使用したいと思います。

ボリュームを使って実際に組み合わせることができますが、100%正しく動作させるのは難しくて混乱します。これをインストールし、ホストから設定をコピーすることをお勧めします。

ホストがシェルとして使用され、bashUbuntuベースのイメージから作成されたコンテナを使用しようとしているとします。foo:latest

この場合、次のように生成できますDockerfile

FROM foo:latest
RUN apt-get update && apt-get -y install bash
COPY .bashrc /root/.bashrc
COPY .profile /root/.profile

今:

  • ディレクトリの作成newimage
  • .bashrchomedirから.profileこのディレクトリにコピーします。
  • このディレクトリに移動して実行します。docker build -t foo:withbash

foo:withbashこれでb​​ashと同じイメージが作成されますが、foo:latestホストシステムのbash構成もあります。

(他のシェル、Centos、その他のディストリビューションでも同じトリックを使用できますが、zshDockerfileのコマンドは少し異なります。)

編集する: いくつかの注意:

  • 私のdockerfileはあなたがコンテナのルートであると仮定します(通常はそうです)。このコンテナのルートでない場合は、これらのファイルが正しいディレクトリにコピーされるように、最後の2行を変更する必要があります。
  • 2行目は、Debian、Ubuntu、または同様のディストリビューションに基づくすべてのDockerイメージに適用されます。
    CentOSまたは同様のディストリビューションに基づいている場合は、次のことをしたいと思います。yum -y update && yum -y install bash
    Alpineに基づいている場合は、次のようになります。RUN apk add --no-cache bash
  • zshを行2と3bashに変更するにはzsh

関連情報