【Docker】Ubuntuコンテナでufwなどのネットワーク関連コマンドを使用できるようにする方法


Docker環境で、Ubuntuコンテナを構築したのですが、ファイアウォール系のコマンド(nfw、netstat)などが使えません。

Dockerではデフォルトではコンテナ内のデバイスへのアクセスが許可されていないので、コンテナ内でのシステムを使うのに制限がかかってしまいます。
なので、「docker run」実行時にオプション「–privileged」を使用する必要があります。

今回構築するubuntuコンテナでもsystemctlが使用できないので、「docker run」にオプションをつけてコンテナを起動するようにします。

「Docker」Ubuntuコンテナ内のシステムを使用できるオプション「–privileged」を実行

上記でも説明したようにDockerコンテナはデフォルトではコンテナのある一定のデバイスへのアクセスは許可されていません。
なので「privileged」を使用することにより、コンテナはすべてのデバイスへのアクセスが許可されるようになりmす。

「docker run –privileged」を実行することにより、コンテナ内の全てのデバイスへのアクセスが可能になります。

「–privileged」オプション実行例

以下はコンテナ起動時、「docker run」でオプション「–privileged」を使用した例となります。

今回はUbuntuの公式イメージをダウンロードし、リモートアクセスができるように「VCN」ポート(5901)を解放したコンテナの起動となります。
また、「-d」はバックグラウンドで起動するように実行しました。

$ docker run --privileged -it -d --name my-ubuntu -p 5901:5901 ubuntu

これで、以下のようにUbuntuコンテナが正常に起動したことが確認できます。

$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED             STATUS             PORTS                                             NAMES
25ea4973ebfb   ubuntu    "/bin/bash"   About an hour ago   Up About an hour   0.0.0.0:5901->5901/tcp, 0.0.0.0:13389->3389/tcp   my-ubuntu

これで、Ubuntuコンテナ内で、ファイアウォール「nfw」や、ネットワーク関連コマンド「netstat、iptables」が利用できるようになります。


「Ubuntu」コンテナ内で「ufw」などのネットワーク関連コマンドを実行する

以下では実際にUbuntuコンテナ内にアクセスし、コマンドを実行した例となります。

「docker exec」でコンテナにアクセスします。

$ docker exec -it my-ubuntu /bin/bash

すでにデフォルトで「iptables」などは使用できるようになっています。
「ufw」や「netstat」コマンドは別途インストールが必要となるので以下を参考にしてください。

「ufw」インストール

Ubuntuでの「ufw」インストールコマンドは以下となります。

root@e61ff71f4128:/# apt-get install ufw

インストール後、ステータスを見ても「inactive」の状態のため、「active化」します。

root@e61ff71f4128:/# ufw status
Status: inactive

「uwf」アクティブ化

root@e61ff71f4128:/# ufw enable
Firewall is active and enabled on system startup

再度ステータス確認し、ufwがアクティブになっていることを確認

root@e61ff71f4128:/# ufw status
Status: active

これで「ufw」コマンドが使えるようになります。

「net-tools」インストール

「netstat」などのネットワーク系のコマンドは「net-tools」コマンドをインストールします。

root@e61ff71f4128:/# apt-get -y install net-tools

インストールが正常に完了したら、以下のように「netstat」コマンドなどのネットワーク系のコマンドが使用できるようになります。

root@e61ff71f4128:/# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 e61ff71f4128:34104      91.189.88.152:http      TIME_WAIT
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path

Ubuntuコンテナでシステム系のコマンドを使用したいときは参考にしてください。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!