<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gitlab.rb on Joonlog</title><link>https://joonlog.github.io/tags/gitlab.rb/</link><description>Recent content in Gitlab.rb on Joonlog</description><generator>Hugo -- gohugo.io</generator><language>ko-kr</language><lastBuildDate>Thu, 04 Dec 2025 09:00:00 +0900</lastBuildDate><atom:link href="https://joonlog.github.io/tags/gitlab.rb/index.xml" rel="self" type="application/rss+xml"/><item><title>GitLab Container Registry에 Docker Push 실패 TroubleShooting</title><link>https://joonlog.github.io/p/gitlab-container-registry%EC%97%90-docker-push-%EC%8B%A4%ED%8C%A8-troubleshooting/</link><pubDate>Thu, 04 Dec 2025 09:00:00 +0900</pubDate><guid>https://joonlog.github.io/p/gitlab-container-registry%EC%97%90-docker-push-%EC%8B%A4%ED%8C%A8-troubleshooting/</guid><description>&lt;blockquote&gt;
&lt;p&gt;GitLab Omnibus 설정 간 URL에 공인/사설 IP 혼용 시 Docker Push 실패 문제 해결&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="문제-상황"&gt;문제 상황
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;GitLab 웹 콘솔은 외부에서 접근해야 하니 공인 IP로 접근 필요&lt;/li&gt;
&lt;li&gt;Jenkins나 다른 WAS 서버에서 이미지 Pull/Push할때 사설 IP로 접근 필요
&lt;ul&gt;
&lt;li&gt;그래서 gitlab.rb 파일에 &lt;code&gt;external_url&lt;/code&gt;은 공인 IP, &lt;code&gt;registry_external_url&lt;/code&gt;은 사설 IP 로 설정한 상황&lt;/li&gt;
&lt;li&gt;여기서 docker push 테스트 시 푸시가 중간에서 끊김&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="원인-분석"&gt;원인 분석
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;GitLab Container Registry는 push 과정에서 이미지 blob을 업로드할 때, GitLab의 canonical URL(=external_url)을 기준으로 내부 리다이렉트 동작을 수행&lt;/li&gt;
&lt;li&gt;동작 과정
&lt;ol&gt;
&lt;li&gt;사용자는 사설 IP(&lt;code&gt;registry_external_url&lt;/code&gt;)로 push 요청을 보냄&lt;/li&gt;
&lt;li&gt;Registry는 manifest 처리 과정에서 GitLab API 엔드포인트를 호출함 → 이때 GitLab의 external_url(공인 IP)을 참조&lt;/li&gt;
&lt;li&gt;사설 → 공인으로 트래픽 루프가 발생&lt;/li&gt;
&lt;li&gt;클라우드 서버라 루프백이 막혀 있어 트래픽이 중간에 끊김&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;즉 GitLab의 두 URL이 서로 다른 네트워크 망을 가리킴으로 인해 redirect loop 구조가 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="조치"&gt;조치
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;external_url&lt;/code&gt;, &lt;code&gt;registry_external_url&lt;/code&gt;을 IP가 아닌 도메인으로 설정&lt;/li&gt;
&lt;li&gt;도메인은 공인 IP와 매핑하고, 사설 IP가 필요한 WAS 서버나 Jenkins 서버에서는 &lt;code&gt;hosts&lt;/code&gt; 설정으로 IP를 사설 IP로 지정되도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="결론"&gt;결론
&lt;/h3&gt;&lt;p&gt;GitLab Container Registry는 push 과정에서 canonical URL을 기반으로 내부 API 호출 및 redirect가 발생하기 때문에 &lt;code&gt;external_url&lt;/code&gt;과 &lt;code&gt;registry_external_url&lt;/code&gt; 이 서로 다른 네트워크를 가리키면 push 실패가 발생할 수 있다.&lt;/p&gt;
&lt;p&gt;이를 해결하려면 url을 도메인으로 설정해서 리다이렉트가 발생하지 않도록 해야 한다.&lt;/p&gt;</description></item></channel></rss>