This article will show you how to run a private docker registry on RHEL 7 server
Install docker ce if you don’t have one
Start a docker registry container
# Below command will start a docker container running on port 5000, name is registry, image location is /home/user/DockerRegistry
# Change those options accordingly based on your needs
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /mnt/registry:/home/user/DockerRegistry \
registry:2
# Now you have a docker registry container running, and can be verified with:
docker ps -a
# Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb7342c85a8 registry:2 "/entrypoint.sh /etc…" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
Another example if you need your registry accessible externally and in a secured way. check its official site https://docs.docker.com/registry/deploying/
If you experience an error when run “docker push …” , eg “unknown blob”
try to check with your domain host provider, below demonstrate a solution for nginx of this issue
# nginx.conf file, update below settings for your domain, eg.registry.domain.co
proxy_set_header X-Forwarded-Proto https;
# and after this if you facing a 413 error, add below configuration in http section (outside server section)
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# Restart nginx and you should be ready to go.
Create basic authentication to registry
# Create auth folder
mkdir auth
# Create authentication phrase
docker run \
--entrypoint htpasswd \
httpd:2 -Bbn yourusername yourpassword > auth/htpasswd
# Stop the running registry
docker container stop registry
# Start registry with auth enabled
docker run -d \
-p 443:5000 \
--restart=always \
--name registry \
-v "$(pwd)"/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e LETSENCRYPT_HOST=registry.yourdomain.com \
-e LETSENCRYPT_EMAIL=youremail@yourdomain.com \
-v /mnt/registry:/home/user/DockerRegistry \
registry:2
# Try login with credentials created
docker login myregistrydomain.com
Optional-If you need remote connection for this registry, follow below steps
# Open firewall port for docker registry
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
# Reload firewall rule.
sudo firewall-cmd --reload
Then follow below article to create domain or subdomain for your docker registry