[解決済み] Ubuntuでのdocker + ufwのベストプラクティスを教えてください。
質問
Dockerを試したところです。素晴らしいのですが、ufwとうまく動作しないようです。デフォルトでは、docker は iptables を少し操作します。結果はバグではありませんが、私が期待したものではありませんでした。 詳しくは UFW+Dockerの危険性
私の目標は、以下のようなシステムを構築することです。
Host (running ufw) -> docker container 1 - nginx (as a reverse proxy)
-> docker container 2 - node web 1
-> docker container 3 - node web 2
-> .......
私はufwを通して受信トラフィックを管理したい(例えばアクセス制限)ので、dockerにiptablesを触らせたくありません。以下は私のテストです。
環境です。
- 新しくインストールした Ubuntu 14.04 (kernel: 3.13.0-53 )
- Docker 1.6.2
- ufw転送が有効です( [UFW転送を有効にする]) 2 )
-
--iptables=false
がDockerデーモンに追加されました。
最初の試み
docker run --name ghost -v /home/xxxx/ghost_content:/var/lib/ghost -d ghost
docker run --name nginx -p 80:80 -v /home/xxxx/nginx_site_enable:/etc/nginx/conf.d:ro --link ghost:ghost -d nginx
運が悪い。最初のコマンドは問題ありませんが、2番目のコマンドはエラーを投げます。
Error response from daemon: Cannot start container
2回目の試行
すると、こんなものが出てきました。 unable to link containers with --iptables=false #12701
以下のコマンドを実行した後、すべてが問題ないように見えます。
sudo iptables -N DOCKER
しかし、コンテナ内の送信接続を確立することができないことに気づきました。たとえば
xxxxg@ubuntu:~$ sudo docker exec -t -i nginx /bin/bash
root@b0d33f22d3f4:/# ping 74.125.21.147
PING 74.125.21.147 (74.125.21.147): 56 data bytes
^C--- 74.125.21.147 ping statistics ---
35 packets transmitted, 0 packets received, 100% packet loss
root@b0d33f22d3f4:/#
もし私が
--iptables=false
を削除すると、コンテナのインターネット接続は正常に戻りますが、ufw は「正しく」動作しません (まあ...私の定義では)。
それで、docker + ufw のベストプラクティスは何でしょうか?どなたか、何らかの手助けをしていただけませんか?
どのように解決するのですか?
私は数ヶ月前にこのような問題が発生したことがあり、最近、私のブログで解決策と一緒に問題を説明することにしました。これがその近道です。
使用方法
--iptables=false
を使っても、あなたが説明したようなケースにはあまり役に立ちません。ここでは単に十分ではありません。デフォルトでは、どのコンテナも発信接続を行うことはできません。
ここで、UFW の背後にあるコンテナを持つための方法について、あなたが省略している小さなステップがあります。あなたは
--iptables=false
を使うか、あるいは
/etc/docker/daemon.json
ファイルを作成し、その内容は次のようになります。
{
"iptables": false
}
を指定しても結果は同じですが、後者の場合、docker サービス全体を
service docker restart
で再起動するか、この機能を無効にする前に docker が iptables のルールを追加する機会があったのなら、再起動する必要があります。
完了したら、あと2つのことをするだけです。
$ sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
$ ufw reload
ということで、UFWでacceptのデフォルトフォワードポリシーを設定し、使用します。
$ iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
この方法では、iptables ルールで docker の面倒な動作を無効にすると同時に、docker に必要なルーティングを提供して、コンテナがうまく送信接続できるようにします。UFWルールはこの時点からまだ制限されていますが。
これが、あなたや、答えを探しにここに来た人たちのために問題を解決してくれることを願っています。
この問題と解決策をより包括的に説明したのは、次のサイトです。 https://www.mkubaczyk.com/2017/09/05/force-docker-not-bypass-ufw-rules-ubuntu-16-04/
関連
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] DockerfileのCMDとENTRYPOINTの違いは何ですか?
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerイメージはホストマシン上のどこに保存されていますか?
-
[解決済み] Dockerの「expose」と「publish」の違いは何ですか?
-
[解決済み] Docker - Ubuntu - bash: ping: コマンドが見つかりませんでした。
-
[解決済み] dockerコンテナ内でsudoを使用するには?
-
ubuntuでは、virturalboxがエラーで起動します。
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
makefile:2: *** make後のエラー、解決方法
-
appstreamcli' でエラー: 二重解放または破損 (fasttop): 0x0000000002122000
-
Pip install でエラーが報告されます。AttributeError: 'module' オブジェクトに 'main' 属性がありません。
-
Ubuntu notepad++ をインストールする
-
apt-get install with error: E: Unable to correct problems, you have held broken packages.
-
atomは、国内のミラーを設定します。
-
高性能ウェブサーバーとリバースプロキシサーバーの起動に失敗しました エラー
-
ホスト:github.com を解決できない 問題 解決方法
-
解決する :dpkg: linux-image-4.15.0-33-generic (--configure) パッケージの処理にエラーが発生しました。
-
[解決済み] Ubuntu 14.04 LTS (Trusty Tahr)にia32-libsをインストールする方法