ユーザーランドプロキシの起動エラー:listen tcp4 0.0.0.0:443:bind:アドレスが既に使用されています

Discourse を試してみたいので Docker 経由でインストールしようとしているのですが、このエラーが出てしまいます。実は検索してみると、このエラーに遭遇している人は多いようですが、解決方法がわかりません。

starting up existing container

    + /usr/bin/docker start app

    Error response from daemon: driver failed programming external connectivity on endpoint app (7336c875bdf9e3f18f08ca0af0a5aad10181ba37508f92c68f87a75637c56583): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use

    Error: failed to start containers: app

/opt/discourse/containers/app.yml にはすでに以下を設定しています。

expose:

  • “8880:80” # http
  • “8443:443” # https

これは Apache で HTTPS 対応のウェブサイトが動作している Web サーバーなので、確かにポート 443 は既に使用されています。しかし、app.yml で 443 を 8443 にリマップするように設定しているのに、なぜまだこのエラーが出るのでしょうか?

Discourse 公式の標準インストール と、既存の Apache サイトがあるサーバーに Discourse をセットアップする方法 をご覧ください。

含められたパスから判断すると、Bitnami インストールのトラブルシューティング も確認されることをお勧めします。

そのドキュメントは見たのですが、app.yml を変更しても使用ポートに影響しない、あるいは無視されるのでしょうか?Discourse は、変更できない「ハードコード」されたポートを持つ初めてのアプリです。

私は、すでに正常に稼働しているウェブサイトと顧客の間に別のソフトウェアを挟めるのが好きではありません。むしろ、Apache で Discourse へのサブドメインをマッピングしたいと考えています。

また、もしポート 443 での実行が強制される、同様の挙動をする別のアプリケーションが現れたらどうすればよいでしょうか?

はい、その通りです。ただし、./launcher rebuild app(あるいは ./launcher destroy app; ./launcher start app)を実行する必要があります。おそらく、ファイルを変更しただけで、既にポートが設定済みのコンテナを再起動しただけなのではないでしょうか。