DockerイメージNginx-proxyの最新版をpullしてしまうとlocalhostの80番ポートにポートフォワードできなくなるので安直なアプデに注意

新しくAppleシリコンのMac、いわゆるM1Macを買ったので、よっしゃと意気込んでDockerなどの開発環境を構築していたら見事にハマりました。仕事が4日止まった。

結論から言うとNginx-proxyのバージョンの問題でした。解決方法がわからないので、動くバージョンまで下げました。わかる方いたら教えて下さい😥


やりたいこと

  • RailsとNginxのコンテナを旧環境(Mac)から移行する
  • 新環境ではM1Macに対応したDocker Desktopを使用。
  • 旧環境と同じようにlocalhost(or ローカルIPアドレス)にアクセスしたらRailsが表示されるようにしたい

症状

  • buildは問題なし。
  • 3000番ポートでRailsが立ち上がったので80番ポートにアクセスしたら502エラーが出る
  • 3000番はpuma(アプリケーションサーバ)で稼働してる
  • Nginxコンテナ内のdefault.confを見てみると、172.x.x.x:80を参照することになっている
  • なんかnginx-proxyをupするたびにhoge_defaultみたいなネットワーク(brige)を作ってる。今までなかった・・・

確認したこと

地道に確認。Dockerのネットワークの基本なんかをおさらいしました。

  • macOSのバージョン
  • CPUによる違いがないか別のintelMacでも検証
  • DockerDesktopのバージョン
  • インストールされたDockerのバージョン
  • セキュリティソフト(eset)
  • ちゃんと同一のネットワークにつながっているか
  • Dockerイメージのバージョン←これが今回の原因

原因

結局Dockerイメージ(nginx-proxy)のバージョンが原因でした。

jwilder/nginx-proxy

そういえば忘れてたなあと思いつつ、旧環境の方でpullコマンドでlatestに更新してみたら、これまで見えてたRailsが表示されなくなって502エラーに。あ、これだ。

というわけで原因がわかってからはとりあえずバージョンを少しずつ下げていって、うまくいかないバージョンを特定することに。
結果、ver0.9.1からがうまくいかないということがわかりました。
0.9.0を指定してupしたら見事80番ポートで別コンテナのRailsアプリが表示されました。👏🎉㊗

ちなみにSSL(Let’s Encrypt)の自動更新なんかをしてくれるコンテナであるletsencrypt-nginx-proxy-companionは最新版で大丈夫でした。

これからどうするのか

ネットワーク内の別コンテナの指定ポートでdefault.confを書き換えてくれればいいんですけど、仕様が変わってそれがうまくいっていないみたいです。
ドキュメントも読んでみましたが、よくわからなかったので一旦アップデート待ち。
最終更新日がまだ4日前とかの出来たてホヤホヤなので、バグならまたすぐにアプデが入るかもしれません。

しばらく動きがないようであればDokcer-hub経由で聞いてみようと思います。

docker-compose.ymlにあんまり手を加えたくない人はとりあえず0.9.0までにしておきましょう。

version: '2'
  services:  
    proxy:
      image: jwilder/nginx-proxy:0.9.0

それにしても、新環境でdocker pullしたら最新版のイメージが落ちてくるという当たり前のことを見落としていたので悔しい。

公開日