/usr/bin/docker: 데몬에서 오류 응답: 엔드포인트 app에서 외부 연결 프로그래밍 실패

여러분, 이 문제로 일주일 넘게 고생하고 있어요. 메타의 관련 주제들을 전부 읽고 여기저기서 제시된 모든 해결책을 시도해 봤지만, 아무것도 먹히지 않아요. 정말 막막합니다.

매번 ./launcher rebuild app을 실행하면 끝까지 진행되는데, 그러고 나면…

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
2bef25314e87e6c0679ced8f3c04dd8a98808350baba7a4ff94a3e4c55dc5c20
/usr/bin/docker: Error response from daemon: driver failed programming external connectivity on endpoint app (095c02cba7ddee18c64f04ccd1043408aa8ffed8a3c560b8eeeea133c7abe6c6): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.

해결책이 단순할 것 같은데, 도무지 찾지 못하겠어요.

해결 방법을 아시는 분 있으신가요?

포트 80이 막혀 있는 것 같습니다. 이는 어떤 종류의 웹 서버가 실행 중임을 의미합니다.

제프, 고마워. 오늘早些 이 주제에 대한 '15년 스레드에서 네 댓글을 읽었어. 이게 뭔지를 추적할 터미널 명령어가 있어?

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을 사용하도록 만들어져 있더라고요. 앱이 좀 이상해서 완전 삭제하고 휴지통까지 비웠습니다. 구글 앱을 종료하자마자 **활성성 모니터(Activity Manitor)**에 ContactAccountsServices라는 이름의 프로세스가 나타났어요. 이걸 종료하고 컴퓨터 전체를 재시작했습니다.

컴퓨터가 다시 켜졌을 때, 위에서 말한 Google이 크롬 브라우저의 두 번째 탭이라는 걸 발견했어요. 크롬을 종료하고 ./launcher rebuild app을 실행했습니다. 재시작 후 ssh root@...로 접속해서 우분투 서버에서 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님 감사합니다!