Установка Discourse на сервере без доступа к DockerHub

@sam Сэм, моя компания теперь блокирует Docker Hub. Я запускаю Docker для Discourse в нескольких средах и мне нужно выполнить обновление. Очевидно, что это не удаётся:

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, а затем каким-то образом загрузить или передать её на машину, требующую обновления. После этого как-то заставить Discourse или лаунчер использовать локальные образы и не пытаться загружать их из Docker Hub. Я видел различные обсуждения, где почти находил решения, которые могли бы сработать, но ничего чёткого. Как это сделать?

Команды docker save и docker load помогут вам с этим.

@Falco Не могли бы вы привести конкретные примеры команд для сохранения и загрузки… например, что именно сохранять, куда сохранять и какая полная команда используется для загрузки?

Я уже много раз успешно применял идею из этого поста

Завтра, когда буду за рабочим столом, я смогу привести более конкретный пример.

@Falco — Большое спасибо, с нетерпением жду примера для настольной версии… Надеюсь, я всё правильно понимаю, так как беспокоюсь о том, чтобы случайно уничтожить свои хост-сайты не просто «обновлением».

У меня есть устаревший Docker-сайт Discourse для моей компании, содержащий информацию, которую я не могу вынести за пределы компании из-за внутренних правил и т. д. Таких сайтов четыре: np.falcoisgreat.com, stg.falcoisgreat.com, tst.falcoisgreat.com и www.falcoisgreat.com. Все они работают на старых версиях… теперь они больше не могут получить доступ к Docker Hub, когда launcher пытается загрузить последний базовый образ Docker.

Поэтому, чтобы обойти это в условиях свободы интернета, я поднял новый сервер Ubuntu с Docker-версией Discourse, чтобы просто скачать последний базовый образ Docker (на самом деле он доступен по адресу https://discourse1.codeplus.cloud). Теперь я планирую загрузить новый образ без контента и без чего-либо ещё, упаковать его, предположительно с помощью команды docker save, затем передать этот tar-файл, например, на np.falcoisgreat.com, используя curl или SFTP, и загрузить его через docker load?

Я не знаю всех деталей этого процесса и изучу их, но меня беспокоит возможность уничтожения текущего контента и конфигурации np.falcoisgreat.com. Конечно, я сделаю резервные копии, но для меня важно найти способ ничего не удалить. Пожалуйста, подтвердите, что этот метод действительно предназначен для того, что я думаю?

Спасибо!

Пусть будут:

  • server1 — сервер с доступом в интернет

  • server2 — сервер, у которого нет доступа к DockerHub

Выполните следующие действия:

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
# передайте файл на server2 через флешку, FTP, дискеты и т. д.
ssh root@server2
docker load -i /tmp/discourse-base-image.tar 
cd /var/discourse
./launcher rebuild app

Это очень круто. Я не знал об этом.

Единственная хитрость в том, чтобы знать, как и когда менять discourse/base:2.0.20230502-0058.

И я думаю, что это просто

cd /var/discourse
git pull
DISCOURSE_BASE=$(grep -e ^image= $DISCOURSE_DOCKER_SRC/launcher|cut -d'"' -f2)
docker pull $DISCOURSE_BASE

И так далее с командой save.

Спасибо @Falco, пока всё отлично! Два окружения обновлены!