Synology NASでTCP/80や443ポートをDockerで使いたいときはmacvlanが使える

プログラミングor技術
Synology NASのTCP/80や443は最初からリバースプロキシ的なものが使っています。
よってそのままでは、Dockerコンテナからは(ホストのNICのIPアドレスでは)TCP/80や443ポートが使えません。 いくつかの対処方法があります。これ以外にもあるはずです。
  • TCP/80や443を使ってるnginxの設定を書き換える(みずき庵:SynologyのNASを80番ポートの受け皿にしようとした話
  • (外部からの通信を受けたい場合)NAPTしてるルータのポートマッピング機能で443→50443などとマッピングし、Synology NAS上のDockerコンテナではTCP/443の代わりに50443などを使う
  • macvlanを使い、DockerコンテナのNICに別のIPアドレスを割り当てそのTCP/80や443を使う
上2つはSynology関連のブログ記事でしばしば見ます。
この記事は3つ目のmacvlanを使う方法をもあるよって紹介だけです。 これは全くSynology NAS独自の話ではないし特定のポート番号に限った話でもないからワザワザ記事にする必要もなかったかもしれませんが、Synology NASでTCP/80や443を使いたくて困ってる場合に検索にかかるように書きました。 一応、docker-compose.ymlだと以下のような感じです。
調べればいくらでも出てくるもので目新しいものはありません。

ホストのNICのTCP/80や443を使う版

つまり普通の版です。
前述の通りSynology NASみたいにホストのNICのIPアドレスのTCP/80や443が既に使われてる場合はダメです。
version: '3.3'

services:
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
      - "443:443"

macvlanを使う版

ホストのものとは別なIPアドレス、例では192.168.0.10の全てのポートがDockerコンテナで使えるようになります。
version: '3.3'

networks:
  macvlan:
    driver: macvlan
    driver_opts:
      parent: eth0 # 使いたいホストのネットワークインターフェースを指定
    ipam:
      config:
        - subnet: 192.168.0.0/24 # ホストと同じネットワークを指定

services:
  nginx:
    image: nginx:stable
    networks:
      macvlan:
        ipv4_address: 192.168.0.10 # このコンテナで使いたいIPアドレス. 全てのポートが使える
SynologyのDockerアプリのネットワークタブを見ると、以下のようにドライバがmacvlanとなったネットワークが確認できます。

コメント