Installing Discourse in a server with no access to DockerHub

@sam Sam, my company is now blocking docker hub. I am running Docker for Discourse on multiple environments and need to upgrade. It fails of course:

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.

The easiest way I see for me to do upgrades is if I use another machine not on that same network and download the latest discourse base image… the somehow pull it or push it to the machine to be upgraded. Then somehow, force Discourse or the launcher to look locally and not try and pull from Docker hub… I’ve seen various threads where I almost find that this could work but nothing clear. How would I do this?

docker save and docker load will help you with that.

@Falco Could you please give me specific example commands of how to save and load… like what to save and where to save to and what full command to load?

I used the same idea from this post many times with success

I can cook a more specific example tomorrow when I’m on my desktop

1 Like

@Falco - Thanks so much, I look forward to the desktop example… Hopefully Im understanding this correctly as I’m worried about wiping out my host site(s) with more than just an ‘upgrade’

I have my company discourse docker site that is out of date that contains certain info I cannot move outside of the company… due to company rules etc. There’s 4 different ones… let’s call them: np.falcoisgreat.com, stg.falcoisgreat.com, tst.falcoisgreat.com and www.falcoisgreat.com they all behind like 4 small versions… they can no longer access docker hun when launcher goes to reach out and grab the latest Docker base image.

So, outside in the real world of internet freedoms, I spun up a new ubuntu box with discourse docker just to pull down the latest Discourse Docker base image (actually at https://discourse1.codeplus.cloud) - Now what I am intending to do is just get the new image, without content, without anything tar it up with I guess docker save and then pull that tar file to say np.falcoisgreat.com with curl or sftp and then use docker load?

I don’t know the specifics of that and will poke and read but what I’m worried about is me wiping out the present content and configuration of “np.falcoisgreat.com” — I will make backups of course but for me best to know a way to not wipe out anything. Please confirm that this solution is intended to do what I think it is intended to do?

Thanks!

Be:

  • server1 the server with access to the internet

  • server2 a server that can’t reach DockerHub

Do:

ssh root@server1
docker pull discourse/base:2.0.20230502-0058


# if server1 can reach server2
docker save discourse/base:2.0.20230502-0058 | bzip2 | ssh root@server2 docker load
# wait for it to complete and exit server1
ssh root@server2
cd /var/discourse
./launcher rebuild app


# if server1 can't reach server2
docker save -o /tmp/discourse-base-image.tar discourse/base:2.0.20230502-0058
# transfer the file to server2 via thumb drive, ftp, floppies, etc
ssh root@server2
docker load -i /tmp/discourse-base-image.tar 
cd /var/discourse
./launcher rebuild app
2 Likes

That’s very cool. I didn’t know about that.

The only trick then is to know how and when to change discourse/base:2.0.20230502-0058.

And I think that’s just

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

And so on with the save command.

1 Like

Thanks @Falco so far so good. Two environments upgraded!

2 Likes

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