2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

外部のDockerコンテナにIPをつけて直接アクセスする方法(社内サーバ用)

Last updated at Posted at 2021-10-08

自PCでは無く社内にあるサーバにDockerコンテナを多数起動してクライアントから直接コンテナにアクセスする方法(主に開発、社内サーバ用)。

dockerコンテナのポートを変えてdockerホストにマップしたり、dockerホストでproxyを建ててアクセスする方法はたくさん出てくるのですが、あまり出てこないので残しておきます。この方法のメリットは 用途別にホスト名が別けられることと、 http://servername:8080 のようにいちいちポート番号を考えなくても良いことです。

結論

  1. ルータでコンテナIPへstaticルートを切る
  2. dockerサーバでip4をforwardする

構成図

下記のようなネットワークだった場合の例。

  • 社内ネットワーク(クライアント、ルータ、サーバ)
    192.168.0.0/24

  • dockerコンテナ(サーバ内のdockerコンテナ)
    172.21.0.0/24

Untitled2.png

設定

今回の例では、クライアントからnginxコンテナに直接アクセスします。DockerサーバはLinux。

dockerコンテナ

下記のようにブリッジのネットワークを作って、コンテナにIPをつける。

docker-compose.yml

version: '3.6'

networks:
  share_nw:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: docker1
    ipam:
      driver: default
      config:
        - subnet: 172.21.0.0/24

services:
  nginx:
    image: nginx:latest
    networks:
      share_nw:
        ipv4_address: 172.21.0.10

ルータ

説明書を見てルータのLAN側 静的ルーティングを設定する。
今回の例では、ネットワーク:172.21.0.0/24 → ゲートウェイ:サーバのIP(192.168.0.10)にする。

例)
https://www.asus.com/jp/support/FAQ/1011706/

Dockerサーバ

IPv4 フォワーディングを有効にする。

sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1

reboot

確認

クライアントPCから ping 172.21.0.10 とかしてみる。

ちょっと使いやすく

社内(簡易)DNSサーバを建てる

dnsmasqと言う簡易DNSサーバのコンテナを起動し、各コンテナのIPを名前解決できるようにし、クライアントのDNSはdnsmasqのIPにしておく(ルータのDHCPでDNSをdnsmasqのIPを配るように設定する)。

dnsmasqは下記のような設定をしておく。

nginx-server.example.local     172.21.0.10

dnsmasq (docker hub)
https://hub.docker.com/search?q=dnsmasq&type=image

web経由でコンテナを起動/停止

Portainerがまぁまぁ使いやすい。web経由でコンテナを起動/停止、imageのpullや操作なんかができます。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?