質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1997閲覧

「jwilder/nginx-proxy」を使用したリバースプロキシ環境を構築できない (Let's Encryptを使用)

yamashita_yuich

総合スコア316

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/02/26 05:11

編集2020/02/26 05:29

困っていること

現在、1個のVPSを使用して、複数のサービス立ち上げを実施しようとしています。(金銭的節約のため)
そこで、Let's Encrypt を使用してワイルドカード証明書 (*.xxx.tokyo) を取得しました。

次に、サーバーの80番ポートにnginxをDockerコンテナとして立て、
そこからサブドメインに応じてサービスを呼び出して結果を返却するような処理をしたいと思っています。
(例 : aaa.xxx.tokyo にアクセスが来たらDockerコンテナAに接続する。
bbb.xxx.tokyo にアクセスが来たらDockerコンテナBに接続する。)

しかし、これができずに困っています。

現状

現在、jwilder/nginx-proxy を使用して、上記を達成しようと考えているのですが、うまくいきません。
以下に jwilder/nginx-proxy を使用した docker-compose ファイルを添付します。

docker

1version: '2' 2 3services: 4 5 proxy: 6 image: jwilder/nginx-proxy 7 container_name: nginx-proxy 8 privileged: true 9 ports: 10 - "80:80" 11 - "443:443" 12 volumes: 13 - /etc/letsencrypt/live/xxx.tokyo:/etc/nginx/certs 14 - /var/run/docker.sock:/tmp/docker.sock:ro 15 restart: always 16 17networks: 18 default: 19 external: 20 name: nginx-proxy 21``` 22 23また、呼び出す側のサービスについては、以下のコマンドでサービスを立ち上げています。 24``````shell 25sudo docker run --privileged -e VIRTUAL_HOST=aaa.xxx.tokyo --net nginx-proxy -d -it -p 4003:8080 --name xxx xxx:yyyyMMddHHmmss /bin/sh-c 'java -jar xxx.jar' 26``` 27 28また、現状、dockerの nginx-proxy ネットワークに以下の状態です。 29``````json 30[ 31 { 32 "Name": "nginx-proxy", 33 "Id": "14b2baea5141ce378469d8e0b1c7d427cbb80cbf336c3d8295a6f00b08cfffe1", 34 "Created": "2020-02-26T13:00:53.948523872+09:00", 35 "Scope": "local", 36 "Driver": "bridge", 37 "EnableIPv6": false, 38 "IPAM": { 39 "Driver": "default", 40 "Options": {}, 41 "Config": [ 42 { 43 "Subnet": "172.23.0.0/16", 44 "Gateway": "172.23.0.1" 45 } 46 ] 47 }, 48 "Internal": false, 49 "Attachable": false, 50 "Ingress": false, 51 "ConfigFrom": { 52 "Network": "" 53 }, 54 "ConfigOnly": false, 55 "Containers": { 56 "9dfe662acec396b4919a29c3cffceb70c4e33a95a0ea085ad82858ee35566129": { 57 "Name": "xxx", 58 "EndpointID": "746b9fe12c0448c8e19d058adf549f14df9aa8f7900d6ef8a6da6955842420ac", 59 "MacAddress": "02:42:ac:17:00:02", 60 "IPv4Address": "172.23.0.2/16", 61 "IPv6Address": "" 62 }, 63 "b8c2cd4a1ede804805a8999d1bf4de71a0724c5aa18f1423ef01ed16bfe9b8ae": { 64 "Name": "nginx-proxy", 65 "EndpointID": "8074a0c7e27ec408d2813a1ec34a10fea5a1ce8e009fbb3b73ac78c310a36bc1", 66 "MacAddress": "02:42:ac:17:00:03", 67 "IPv4Address": "172.23.0.3/16", 68 "IPv6Address": "" 69 } 70 }, 71 "Options": {}, 72 "Labels": {} 73 } 74] 75``` 76この状態でブラウザから接続を確認すると以下の状態です。 77- http://xxx.tokyo 78 -> サービスが起動していることがわかる 79- http://xxx.tokyo:4003 80 -> サービスが起動していることがわかる 81- https://xxx.tokyo 82 -> このサイトにアクセスできません、と出てくる 83- http://aaa.xxx.tokyo 84 -> このサイトにアクセスできません、と出てくる 85- https://aaa.xxx.tokyo 86 -> このサイトにアクセスできません、と出てくる 87 88## 実施したこと 89既に jwilder/nginx-proxy の [Readme](https://github.com/jwilder/nginx-proxy) は確認しましたが、 90いまいち理解しきれていない状況です。 91 92何卒解消方法をご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

原因はおそらく質問者さんが期待されている4003番ポートに実際には到達できていないからだと思います。nginx-proxyはバックエンドのコンテナ側も80番で待ち受けることを期待していると思いますが、この場合コンテナ側のポートはjavaの8080番なので、VIRTUAL_PORTを8080に設定する必要がありそうです。
このときnginx-proxyはコンテナ内のネットワークを使うため、ホスト側の4003番ポートをマッピングする必要もなさそうです。

このdocker-compose.ymlだとコンテナは1つしかありませんが、それぞれ別のコンテナを上手くつなげたいなら全部この1つのYAMLで管理するほうが簡単かもしれません。

これは余談ですがdocker-compose.ymlのversion: '2'は古いので3に上げておくと後で楽かもしれません。
1 -> 2と違って2 -> 3のほうがだいぶ難易度は低いです(多分そのまま動きます)

投稿2020/02/29 10:42

編集2020/02/29 10:43
inductor

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamashita_yuich

2020/03/02 08:41

ご回答ありがとうございます。 はい。コンテナ側のjavaのポートを8080から80に変更したところ、正常に動作しました。 (VIRTUAL_PORT を使用する方法も理解しました。ありがとうございます。) また、4003番ポートをマッピングする必要がないのもおっしゃる通りですね。 セキュリティの面からもそうすべきだと思いましたので実施致しました。 (ホスト側の4003ポートは閉じました) docker-compose.yml の version も 3 に上げました。(そのまま動きました!) 今後、リバースプロキシを使用してより多くのコンテナを管理する予定なのですが、 docker-compose.yml 1個で管理してしまうと、個別のコンテナだけを再起動したい場合に 対応できないのではないかと思って分けて管理することにしました。 もし良い方法があればご教示頂けますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問