/usr/bin/docker: デーモンからのエラー応答: エンドポイント app での外部接続のプログラミングにドライバーが失敗しました

みなさん、こんにちは。この問題に1週間以上も悩まされています。メタの関連トピックをすべて読み、ここや他の場所で提示されたすべての解決策を試しましたが、何も機能しません。本当に手がかりがありません。

毎回 ./launcher rebuild app を実行すると、最後まで進んだ後に…

古いコンテナを削除中
+ /usr/bin/docker rm app
app

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=4 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_HOSTNAME=bitkcor.com -e DISCOURSE_DEVELOPER_EMAILS=admin@bitkcor.com -e DISCOURSE_SMTP_ADDRESS=smtp.mailgun.org -e DISCOURSE_SMTP_PORT=2525 -e DISCOURSE_SMTP_USER_NAME=postmaster@bitkcor.com -e DISCOURSE_SMTP_PASSWORD=af3ce4432f9613e0b36545e5c1b941c6-c1fe131e-22e64a1e -e LETSENCRYPT_ACCOUNT_EMAIL=admin@bitkcor.com -h bitkcor-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:d6:ee:ff:fa:8d local_discourse/app /sbin/boot
2bef25314e87e6c0679ced8f3c04dd8a98808350baba7a4ff94a3e4c55dc5c20
/usr/bin/docker: エラー応答:デーモンから - エンドポイント app (095c02cba7ddee18c64f04ccd1043408aa8ffed8a3c560b8eeeea133c7abe6c6) での外部接続のプログラミングにドライバーが失敗しました: ユーザーランドプロキシの起動エラー: listen tcp 0.0.0.0:80: bind: アドレスが既に使用されています。

解決策は簡単にあるはずだと思っていたのですが、見つけることができません。

どなたか答えをご存知でしょうか?

ポート 80 が何かで塞がれており、何らかのウェブサーバーが動作していることを意味します。

ジェフ、ありがとう。今朝、この件に関する2015年のスレッドであなたのコメントを読みました。これを使っているプロセスを追跡するターミナルコマンドはありますか?

sudo lsof -i :80を実行しましたが、以下の結果が得られました。

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3336     root    6u  IPv4  21408      0t0  TCP *:http (LISTEN)
nginx   3336     root    7u  IPv6  21409      0t0  TCP *:http (LISTEN)
nginx   3338 www-data    6u  IPv4  21408      0t0  TCP *:http (LISTEN)
nginx   3338 www-data    7u  IPv6  21409      0t0  TCP *:http (LISTEN)
nginx   3339 www-data    6u  IPv4  21408      0t0  TCP *:http (LISTEN)
nginx   3339 www-data    7u  IPv6  21409      0t0  TCP *:http (LISTEN)

はい、間違ったやり方をしていたようです。root を終了して、再度 sudo lsof -i :80 を実行しました。これが何なのかまだ特定できていませんが、前進しています。

COMMAND   PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google    671 triberocket   30u  IPv4 0x1e729b312ca69e05      0t0  TCP 10.0.0.237:56713->server-13-249-71-64.dfw53.r.cloudfront.net:http (ESTABLISHED)
Google    671 triberocket   58u  IPv4 0x1e729b311af72ba5      0t0  TCP 10.0.0.237:56714->server-13-249-71-64.dfw53.r.cloudfront.net:http (ESTABLISHED)

すっかり混乱しています。Activity Monitorを使ってポート順に並べ替えてみました。今ダウンロードしたばかりの Google Drive File Stream アプリがポート 80 を占有するように作られていたようです。このアプリは酷かったので、完全に削除してゴミ箱も空にしました。Google アプリをシャットダウンした瞬間、ContactAccountsServices というプロセスが Activity Monitor に現れました。それをシャットダウンし、コンピュータを完全に再起動しました。

コンピュータが再起動した後、上記の Google というのは Chrome のタブが 2 つ開いていたことに気づきました。Chrome をシャットダウンし、./launcher rebuild app を実行しました。再起動後、ssh root@... で Ubuntu サーバーに接続し、system reboot を実行しました。これで何かが動いたように思えましたが、早合点するのは危険です。話を長々とすると、

2020-04-10 22:38:39.934 UTC [49] LOG: aborting any active transactions

2020-04-10 22:38:39.937 UTC [49] LOG: worker process: logical replication launcher (PID 58) exited with exit code 1

2020-04-10 22:38:39.939 UTC [53] LOG: shutting down

166:M 10 Apr 2020 22:38:39.942 # User requested shutdown...

166:M 10 Apr 2020 22:38:39.942 * Saving the final RDB snapshot before exiting.

2020-04-10 22:38:39.964 UTC [49] LOG: database system is shut down

166:M 10 Apr 2020 22:38:39.978 * DB saved on disk

166:M 10 Apr 2020 22:38:39.978 # Redis is now ready to exit, bye bye...

sha256:ab0f0c30c7e98b280832fc0355cd0a3eada6063b268b8ae1371e9d315b0ca43e

293cf39b9377bfd9dda6a0e3b9d43bde3e6dcc8341d34d9da21a155f18afb45c

Removing old container

+ /usr/bin/docker rm app

app

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=4 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_HOSTNAME=bitkcor.com -e DISCOURSE_DEVELOPER_EMAILS=admin@bitkcor.com -e DISCOURSE_SMTP_ADDRESS=smtp.mailgun.org -e DISCOURSE_SMTP_PORT=2525 -e DISCOURSE_SMTP_USER_NAME=postmaster@bitkcor.com -e DISCOURSE_SMTP_PASSWORD=af3ce4432f9613e0b36545e5c1b941c6-c1fe131e-22e64a1e -e LETSENCRYPT_ACCOUNT_EMAIL=admin@bitkcor.com -h bitkcor-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:d6:ee:ff:fa:8d local_discourse/app /sbin/boot

b2076d8166130c73c7d988e7e51ac100b9a12ce75f020328d0f47eebdad5e9a3

/usr/bin/docker: Error response from daemon: driver failed programming external connectivity on endpoint app (ba1f594a24e17f29cdaeb0cfe3f2a79af2bb7d22a28c4902c97d37e8f5036347): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.

というわけで、もう草のスカートと鶏の骨を用意してデバッグする準備が整いました。これは何かの呪術的な現象ですが、きっと私が直視しているだけで試していない単純な何かでしょう。それが何なのかは私にはわかりません。あなたならわかりますか?お願いします。私の正念場です。私ならもっとできるはずなのに。笑

sudo systemctl stop nginxを実行してみてください。

nginx のウェルカムページを削除しましたが、現在何も表示されません — https://bitkcor.com/

まだ真っ白な画面をじっと見つめています。何かを再起動する必要がありますか?ご提案はありますか?

実は、Cloudflare の SSL を strict に戻すだけで、すべて元に戻りました。

sudo systemctl stop nginx が解決策でした。

@riking さん、ありがとうございます!