macvlan ネットワークの使用

コンテナ上でネットワーク機能スタックを完全に無効にしたい場合は、コンテナの起動時に --network none フラグを使います。コンテナ内では、ループバック・デバイスのみが作成されます。これを説明するのが以下の例です。

  1. コンテナを作成します。

    $ docker run --rm -dit \
      --network none \
      --name no-net-alpine \
      alpine:latest \
      ash
    
  1. コンテナのネットワーク・スタックを確認し、コンテナ内で一般的なネットワークに関するコマンドをいくつか実行します。 eth0 が作成されていない点に注目します。

    $ docker exec no-net-alpine ip link show
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1
        link/ipip 0.0.0.0 brd 0.0.0.0
    3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN qlen 1
        link/tunnel6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
    
    $ docker exec no-net-alpine ip route
    

    2つめのコマンドが何も返さないのは、ルーティング・テーブルが存在しないからです。

  1. コンテナを停止すると、自動的にコンテナは削除されます。これは作成時に --rm フラグを指定しているからです。

    $ docker stop no-net-alpine
    

次のステップ

参考

Disable networking for a container
https://docs.docker.com/network/host/