ネットワークリンクをDockerコンテナに特別にバインドする

ネットワークリンクをDockerコンテナに特別にバインドする

Dockerを使用してホストネットワークリンクをDockerコンテナに具体的にバインドできますか?

つまり、eth1そのコンテナでのみ使用できるようにコンテナに移動(または他の方法で)します。ホストやホストで実行されている他のコンテナ/VMなどにアクセスできないはずです。

physLinuxコンテナ(LXC)ではこれは簡単で、これを行うネットワークタイプがあります。

物理学:指定された既存のインターフェイスをlxc.net.[i].linkコンテナに割り当てます。

私はない方向を尋ねるまたはmacvlanを使用するか他のハッカー

理想的には標準のDockerコマンドを使用してこれが可能ですが、私が読んだ内容によれば、Dockerのネットワーキング実装がそれをサポートしていないことが懸念されます。コマンドを使用して可能な回避策はipないよりも優れています。

ベストアンサー1

これは標準的なネットワークコマンドでは不可能です。数年前、Dockerはこれを簡単にする機能を明示的に拒否しました(https://github.com/moby/moby/pull/8216)。

もちろん、インターフェイスをDockerコンテナのネットワーク名前空間に手動で移動できますが、これは問題が多いです。たとえば、コンテナを再起動または再作成するたびにネットワークを再構成する必要があります。


コンテナのネットワーク名前空間にインターフェイスを追加するには、次の手順に従ってください。

  1. コンテナのPIDを取得します。

    container_pid=$(docker inspect <container_name_or_id> -f '{{ .State.Pid }}')
    
  2. コンテナの名前空間にインターフェイスを割り当てます。

    ip link set netns ${container_pid} dev ${device}
    

あなたは終わりました...ほとんど。

インターフェイスを名前空間に追加した後に設定するには、次のいずれかを実行する必要があります。

  • 追加の権限でコンテナを実行します。おそらくテストにも使用できますが、おそらくそうです--cap-add=NET_ADMIN--privileged

  • nsenterコンテナーの外部で構成を実行するには、次のようにします。

    nsenter -t ${container_pid} -n ip addr ...
    

これらすべてが動作している間に私が気づいた制限のために、何らかのmacvtap理由でコンテナの内部に物理インターフェイスが必要な場合は、ドライバを使用します。または、この特定のタスクを簡単にするには、他のコンテナ化ツールをlxc使用してください。systemd-nspawn

おすすめ記事