@sam Sam, 제 회사 네트워크에서 Docker Hub 접근이 차단되었습니다. 여러 환경에서 Discourse용 Docker를 실행 중이며 업그레이드가 필요합니다. 당연히 실패하네요:
Error response from daemon: Get https://registry-1.docker.io/v2/: http: server gave HTTP response to HTTPS client
Error response from daemon: Get https://registry-1.docker.io/v2/: http: server gave HTTP response to HTTPS client
Unable to find image 'discourse/base:2.0.20230502-0058' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: http: server gave HTTP response to HTTPS client.
제가 업그레이드를 수행하는 가장 쉬운 방법은 해당 네트워크에 속하지 않은 다른 머신을 사용해 최신 discourse base 이미지를 다운로드한 후, 이를 업그레이드 대상 머신으로 가져오는 것 같습니다. 그리고 나서 Discourse나 launcher가 Docker Hub에서 가져오지 않고 로컬에서 찾도록 강제해야 합니다. 이 방법이 가능할 것 같다는 여러 스레드를 봤지만 명확한 가이드는 없었습니다. 어떻게 하면 될까요?
그래서, 인터넷 자유가 보장된 외부 세계(실제 인터넷 환경)에서 최신 Discourse Docker 기반 이미지를 받아오기 위해 새로운 Ubuntu 서버에 Discourse 도커를 띄웠습니다(실제로는 https://discourse1.codeplus.cloud에서). 이제 저는 콘텐츠나 기타什么东西 없이 새로운 이미지만 가져온 뒤, 아마도 docker save로 tar 파일로 압축한 다음, curl이나 sftp를 사용해 np.falcoisgreat.com으로 그 tar 파일을 가져와 docker load를 사용하려는 계획입니다.
이 과정의 구체적인 사항은 아직 잘 모르지만, 직접 시도해 보고 문서를 읽으며 알아볼 것입니다. 다만 제가 걱정하는 것은 'np.falcoisgreat.com’의 현재 콘텐츠와 구성이 지워지는 것입니다. 물론 백업을 할 것이지만, 아무것도 지우지 않는 방법을 아는 것이 저에게는 최선입니다. 이 해결책이 제가 생각한 대로 동작하도록 의도된 것인지 확인해 주실 수 있을까요?
ssh root@server1
docker pull discourse/base:2.0.20230502-0058
# server1이 server2에 접근할 수 있는 경우
docker save discourse/base:2.0.20230502-0058 | bzip2 | ssh root@server2 docker load
# 완료될 때까지 기다린 후 server1에서 나옵니다
ssh root@server2
cd /var/discourse
./launcher rebuild app
# server1이 server2에 접근할 수 없는 경우
docker save -o /tmp/discourse-base-image.tar discourse/base:2.0.20230502-0058
# USB 드라이브, FTP, 플로피 디스크 등을 사용하여 파일을 server2로 전송합니다
ssh root@server2
docker load -i /tmp/discourse-base-image.tar
cd /var/discourse
./launcher rebuild app