/usr/bin/docker:错误响应来自守护进程:在端点 app 上编程外部连接时驱动程序失败

大家好,这个问题我已经卡了一周多了。我阅读了元讨论区所有相关的话题,并尝试了这里和其他地方的所有解决方案,但都没有效果。我真的束手无策了。

每次我尝试运行 ./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: 地址已在使用中。

我觉得解决方案肯定很简单,但就是找不到。

有人知道答案吗?

1 个赞

端口 80 被占用了,这意味着有某种 Web 服务器在运行。

2 个赞

谢谢 Jeff,今天早些时候我在一个关于 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)
1 个赞

好的,我之前操作错了。退出了 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)
1 个赞

现在彻底搞糊涂了。我使用了活动监视器并按端口排序。我刚下载的一个 Google Drive File Stream 应用被设计为占用 80 端口。这个应用太奇怪了,所以我直接把它删除并清空了废纸篓。就在我关闭 Google 应用后,活动监视器中又出现了一个名为 ContactAccountsServices 的进程。我把它关闭并执行了完整的电脑重启。

电脑重新启动后,我发现上面提到的 Google 实际上是 Chrome 中的两个标签页。我关闭了 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.

所以,是的。我已经准备好穿上草裙、拿着鸡骨头来调试这个问题了。这看起来像是某种巫术,但肯定是我正盯着却还没尝试过的某个简单问题。那到底是什么呢?我无法告诉你。你能告诉我吗?拜托了?我的理智正悬于一线。我不至于这么差劲。哈哈

2 个赞

尝试运行 sudo systemctl stop nginx

4 个赞

已移除 nginx 欢迎页面,但现在无法加载任何内容 — https://bitkcor.com/

还在盯着空白页面发呆。我现在需要重启什么吗?有什么建议吗?

实际上,只需在 Cloudflare 中将 SSL 设置改回“严格”模式,一切就都恢复了。

执行 sudo systemctl stop nginx 就是解决方案。

感谢 @riking

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.