<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>컨테이너 보안 Archives -</title>
	<atom:link href="https://blog.kwt.co.kr/tag/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EB%B3%B4%EC%95%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kwt.co.kr/tag/컨테이너-보안/</link>
	<description>여러분의 돈과 시간을 낭비하지마세요.</description>
	<lastBuildDate>Thu, 27 Aug 2026 05:46:12 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>

<image>
	<url>https://blog.kwt.co.kr/wp-content/uploads/2022/07/cropped-logo_bg-32x32.jpg</url>
	<title>컨테이너 보안 Archives -</title>
	<link>https://blog.kwt.co.kr/tag/컨테이너-보안/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>docker.sock permission denied 해결: chmod 666 없이 안전하게 고치는 법</title>
		<link>https://blog.kwt.co.kr/docker-sock-permission-denied-safe-fix/</link>
					<comments>https://blog.kwt.co.kr/docker-sock-permission-denied-safe-fix/#respond</comments>
		
		<dc:creator><![CDATA[시간 조절자]]></dc:creator>
		<pubDate>Thu, 27 Aug 2026 05:46:12 +0000</pubDate>
				<category><![CDATA[기술]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker Compose]]></category>
		<category><![CDATA[docker.sock]]></category>
		<category><![CDATA[컨테이너 보안]]></category>
		<guid isPermaLink="false">https://blog.kwt.co.kr/docker-sock-permission-denied-safe-fix/</guid>

					<description><![CDATA[<p>컨테이너의 docker.sock permission denied 오류를 숫자 GID, Compose group_add, rootless socket, socket proxy로 안전하게 해결하는 진단 순서를 정리했다.</p>
<p>The post <a href="https://blog.kwt.co.kr/docker-sock-permission-denied-safe-fix/">docker.sock permission denied 해결: chmod 666 없이 안전하게 고치는 법</a> appeared first on <a href="https://blog.kwt.co.kr"></a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>컨테이너 안에서 <code>/var/run/docker.sock: connect: permission denied</code>가 발생하면 <strong>먼저 호스트 소켓의 숫자 GID를 컨테이너의 보조 그룹으로 전달해야 한다.</strong> 그러나 모든 서비스에 소켓을 직접 마운트하는 방식은 호스트 Docker를 사실상 관리자 권한으로 조작하게 만든다. 조회만 필요하다면 socket proxy, 호스트가 rootless Docker라면 실제 사용자 소켓 경로를 쓰는 편이 안전하다. <code>chmod 666</code>, 무분별한 <code>privileged: true</code>, 인증 없는 TCP 2375 공개는 해결책에서 제외해야 한다.</p>



<div class="wp-block-group has-border-color has-background" style="border-color:#bfdbfe;border-width:1px;background-color:#eff6ff;padding-top:20px;padding-right:22px;padding-bottom:20px;padding-left:22px"><div class="wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-1 wp-block-group-is-layout-constrained">


<h2 class="wp-block-heading has-medium-font-size">핵심 요약</h2>



<ul class="wp-block-list">
<li><strong>Linux rootful Docker:</strong> <code>stat -c %g /var/run/docker.sock</code>으로 GID를 확인하고 Compose <code>group_add</code>에 같은 숫자를 넣는다.</li>



<li><strong>Rootless Docker:</strong> 보통 <code>/run/user/$UID/docker.sock</code>을 사용한다. rootful 경로를 계속 마운트하면 권한을 고쳐도 다른 daemon을 가리킨다.</li>



<li><strong>보안:</strong> Docker 공식 문서는 소켓과 Docker 그룹이 root 수준 권한을 준다고 경고한다. <code>:ro</code>만 붙여 API 쓰기 권한이 제한된다고 가정하면 안 된다.</li>



<li><strong>최소 권한:</strong> 컨테이너 목록·이벤트 조회만 필요하면 허용 API를 줄인 socket proxy를 별도 내부 네트워크에 둔다.</li>
</ul>


</div></div>



<h2 class="wp-block-heading">오류 원인은 파일 권한보다 숫자 GID 불일치인 경우가 많다</h2>



<p>Unix socket 접근은 경로 문자열이나 그룹 이름이 아니라 커널이 보는 숫자 UID·GID와 권한 비트로 결정된다. 호스트의 <code>docker</code> 그룹이 GID 998인데 컨테이너 이미지 안의 같은 이름 그룹이 GID 999라면 이름이 같아도 권한이 맞지 않는다. 반대로 이미지에 <code>docker</code>라는 그룹이 없어도 실행 프로세스가 보조 그룹 998을 가지면 소켓의 그룹 읽기·쓰기 권한을 사용할 수 있다.</p>



<figure class="wp-block-table"><table><thead><tr><th>증상</th><th>우선 확인</th><th>가능성이 큰 원인</th></tr></thead><tbody><tr><td>소켓 파일이 보이지만 permission denied</td><td>호스트 소켓 GID와 컨테이너 프로세스 그룹</td><td>숫자 GID 불일치</td></tr><tr><td>no such file or directory</td><td>호스트와 컨테이너의 실제 소켓 경로</td><td>rootless 경로 또는 Docker Desktop 차이</td></tr><tr><td>호스트에서는 되지만 컨테이너에서 실패</td><td>컨테이너의 <code>id</code>, 실행 사용자</td><td>비루트 사용자의 보조 그룹 누락</td></tr><tr><td>연결은 되지만 특정 작업 실패</td><td>Docker API 응답과 proxy 정책</td><td>허용 endpoint·HTTP method 제한</td></tr><tr><td>재부팅·재배포 뒤 다시 실패</td><td>소켓 GID와 Compose 보간값</td><td>배포 시 하드코딩한 GID가 현재 호스트와 다름</td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1050" height="840" src="https://blog.kwt.co.kr/wp-content/uploads/2026/08/docker-sock-diagnostic-flow.png" alt="docker.sock 실제 경로와 UID GID를 확인한 뒤 최소 권한 방식을 선택하는 진단 순서" class="wp-image-2814" style="width:640px;height:auto"/><figcaption class="wp-element-caption">소켓 경로·숫자 GID·권한 범위를 차례로 확인하는 진단 흐름<br />출처: Docker 공식 문서 기반 구성</figcaption></figure></div>


<h2 class="wp-block-heading">1단계: 경로·소유권·프로세스 그룹을 숫자로 확인한다</h2>



<p>권한을 바꾸기 전에 아래 세 결과를 같은 시점에 수집한다. 첫 블록은 Docker 호스트에서, 두 번째 블록은 문제가 난 컨테이너 안에서 실행한다. <code>ls -l</code>의 그룹 이름만 보지 말고 <code>ls -ln</code> 또는 <code>stat</code>의 숫자를 비교해야 한다.</p>



<pre class="wp-block-code"><code>stat -c &#x27;mode=%a uid=%u gid=%g path=%n&#x27; /var/run/docker.sock
ls -ln /var/run/docker.sock
id

docker inspect --format &#x27;{{.Config.User}} {{json .HostConfig.GroupAdd}}&#x27; SERVICE_CONTAINER

docker exec SERVICE_CONTAINER sh -c &#x27;
  id; ls -ln /var/run/docker.sock; test -S /var/run/docker.sock &amp;&amp; echo socket-ok
&#x27; </code></pre>



<p>일반적인 rootful Docker 소켓은 root 소유이며 Docker 그룹에 접근 권한이 있다. 다만 배포판과 설치 방식에 따라 GID는 달라질 수 있으므로 글이나 다른 서버의 숫자를 복사하면 안 된다. SELinux·AppArmor가 적용된 환경에서는 Unix 권한이 맞아도 보안 정책이 막을 수 있다. 이 경우 감사 로그와 Docker 공식 보안 프로필 문서를 별도로 확인해야 한다.</p>



<h2 class="wp-block-heading">2단계: Compose group_add로 호스트 GID를 전달한다</h2>



<p>호스트가 Linux rootful Docker이고 서비스가 소켓을 직접 사용해야 한다면 다음 구성이 가장 단순하다. Docker Compose 공식 명세의 <code>group_add</code>는 컨테이너 사용자가 속할 추가 그룹을 지정한다. 숫자 GID를 넘기면 이미지 내부 그룹 이름에 의존하지 않는다.</p>



<pre class="wp-block-code"><code>export DOCKER_GID=&quot;$(stat -c &#x27;%g&#x27; /var/run/docker.sock)&quot;
docker compose up -d --force-recreate

services:
  manager:
    image: example/manager:latest
    user: &quot;1000:1000&quot;
    group_add:
      - &quot;${DOCKER_GID}&quot;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    security_opt:
      - no-new-privileges:true</code></pre>



<ol class="wp-block-list">
<li><strong>현재 호스트에서 <code>DOCKER_GID</code>를 계산한다.</strong> <code>.env</code>에 오래된 숫자를 영구 저장하지 않는다.</li>



<li><strong>서비스를 재생성한다.</strong> 실행 중 컨테이너의 그룹 목록은 Compose 파일만 수정해도 자동으로 바뀌지 않는다.</li>



<li><strong><code>docker exec ... id</code>로 보조 그룹을 확인한다.</strong> 소켓 GID와 같은 숫자가 보여야 한다.</li>



<li><strong>최소 API 호출을 검증한다.</strong> Docker CLI가 있으면 <code>docker version</code>, 없으면 애플리케이션의 health check나 Unix socket <code>/_ping</code>을 쓴다.</li>



<li><strong>애플리케이션이 정말 소켓 전체 권한을 필요로 하는지 재검토한다.</strong> 조회 목적이면 다음 단계의 proxy가 더 적합하다.</li>
</ol>



<p>이 구성은 permission denied를 해결하지만 권한을 축소하지는 않는다. Docker 공식 <code>docker run</code> 문서는 소켓과 Docker 바이너리를 함께 마운트하면 컨테이너가 호스트 daemon의 컨테이너를 생성·조작할 수 있는 전체 접근권을 얻는다고 명시한다.</p>



<h2 class="wp-block-heading">3단계: rootless Docker라면 소켓 경로부터 바꾼다</h2>



<p>Rootless mode는 daemon과 컨테이너를 비루트 사용자로 실행한다. Docker 공식 설치 출력은 사용자별 소켓과 <code>DOCKER_HOST</code> 설정을 안내한다. 흔한 형태는 <code>unix:///run/user/1000/docker.sock</code>이지만 UID를 하드코딩하지 말고 현재 context와 환경변수로 확인해야 한다.</p>



<pre class="wp-block-code"><code>docker context show
docker context inspect &quot;$(docker context show)&quot;
echo &quot;$DOCKER_HOST&quot;
ls -ln &quot;/run/user/$(id -u)/docker.sock&quot;

services:
  manager:
    environment:
      DOCKER_HOST: unix:///run/docker-user.sock
    volumes:
      - /run/user/${ROOTLESS_UID}/docker.sock:/run/docker-user.sock</code></pre>



<p>Rootless socket은 사용자 runtime 디렉터리 아래에 있으므로 서비스 부팅 순서와 로그인 세션 유지 설정도 영향을 준다. rootless daemon이 시작되지 않았거나 사용자 runtime 디렉터리가 사라졌다면 권한 수정이 아니라 daemon·systemd user service 상태를 고쳐야 한다. rootful <code>/var/run/docker.sock</code>과 rootless 사용자 소켓을 동시에 두고 잘못된 쪽을 가리키는 구성도 피해야 한다.</p>



<h2 class="wp-block-heading">4단계: 조회 목적이면 socket proxy로 권한을 줄인다</h2>



<p>대시보드·모니터링·자동 업데이트 도구가 Docker API의 일부만 필요한다면 소켓을 각 컨테이너에 직접 배포하지 않는 편이 낫다. <code>Tecnativa/docker-socket-proxy</code>는 Docker 공식 구성요소가 아닌 공개 소스 프로젝트지만 endpoint 종류와 POST 허용 여부를 환경변수로 제한하는 대표적인 선택지다.</p>



<pre class="wp-block-code"><code>services:
  docker-proxy:
    image: tecnativa/docker-socket-proxy:latest
    environment:
      CONTAINERS: 1
      IMAGES: 0
      SERVICES: 0
      POST: 0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks: [docker-api]
    restart: unless-stopped

  dashboard:
    environment:
      DOCKER_HOST: tcp://docker-proxy:2375
    networks: [docker-api]

networks:
  docker-api:
    internal: true</code></pre>



<ul class="wp-block-list">
<li><strong>proxy 포트를 호스트의 <code>0.0.0.0:2375</code>에 공개하지 않는다.</strong> 필요한 서비스만 참여하는 내부 Docker 네트워크에 둔다.</li>



<li><strong><code>POST=0</code>부터 시작한다.</strong> 컨테이너 시작·중지·삭제가 필요하다고 확인된 경우에만 관련 endpoint와 쓰기를 추가한다.</li>



<li><strong>허용 목록을 버전 관리한다.</strong> 애플리케이션 업데이트가 새 endpoint를 요구하면 오류를 보고 검토한 뒤 열어야 한다.</li>



<li><strong>proxy 자체도 고가치 구성요소로 취급한다.</strong> 이미지 버전을 고정하고 로그·네트워크·업데이트 정책을 관리한다.</li>
</ul>



<p><code>:ro</code> bind 옵션만으로 Docker API를 읽기 전용으로 만들었다고 판단하면 안 된다. 이 옵션은 마운트된 경로의 파일시스템 쓰기를 제한하는 설정이지 daemon API의 HTTP method를 인가하는 정책이 아니다. 실제 API 작업을 제한하려면 proxy의 method·endpoint 정책이나 별도 권한 계층이 필요하다.</p>



<h2 class="wp-block-heading">환경별 선택 매트릭스</h2>



<figure class="wp-block-table"><table><thead><tr><th>환경·목적</th><th>권장 시작점</th><th>피해야 할 선택</th><th>검증</th></tr></thead><tbody><tr><td>Linux rootful, 관리 작업 필요</td><td>현재 소켓 GID + <code>group_add</code></td><td>GID 하드코딩, chmod 666</td><td>컨테이너 <code>id</code>와 <code>docker version</code></td></tr><tr><td>Linux rootless</td><td>사용자 socket 경로 + 올바른 <code>DOCKER_HOST</code></td><td>rootful 경로를 관성적으로 마운트</td><td>context, user service, socket 존재</td></tr><tr><td>모니터링·대시보드 조회</td><td>내부망 socket proxy + POST 차단</td><td>각 서비스에 socket 직접 마운트</td><td>허용 GET 성공, POST 거부</td></tr><tr><td>Docker Desktop</td><td>Desktop가 제공하는 Linux socket 연동 확인</td><td>호스트 OS 경로를 Linux와 동일시</td><td>컨테이너 유형·Desktop 설정 확인</td></tr><tr><td>CI에서 원격 daemon 사용</td><td>SSH 또는 인증된 TLS 연결 검토</td><td>인증 없는 TCP 2375</td><td>인증·네트워크 범위·감사 로그</td></tr></tbody></table></figure>



<p>Windows Docker Desktop에서 Windows 컨테이너와 Linux 컨테이너는 경로 의미가 다를 수 있다. 최근 공개 이슈에서도 <code>/var/run/docker.sock</code> 하드코딩 때문에 Windows named pipe 대체 경로가 없어 실패한 사례가 확인됐다. 이미지가 특정 플랫폼만 지원하는지 먼저 확인하고, 경로 치환만으로 해결되지 않으면 제품의 공식 지원 범위를 따라야 한다.</p>



<h2 class="wp-block-heading">보안을 악화시키는 빠른 해결책 세 가지</h2>



<ul class="wp-block-list">
<li><strong><code>chmod 666 /var/run/docker.sock</code>:</strong> 모든 로컬 사용자가 daemon에 명령을 보낼 수 있게 한다. 재시작 뒤 사라지는 임시 처방이면서 공격 범위를 넓힌다.</li>



<li><strong><code>privileged: true</code> 추가:</strong> 단순 GID 문제보다 훨씬 큰 권한을 컨테이너에 준다. 소켓 Unix 권한을 해결하려고 사용할 이유가 없다.</li>



<li><strong>TCP 2375를 외부에 공개:</strong> 인증·TLS 없는 Docker API는 원격 호스트 제어 경로가 될 수 있다. Docker 공식 보안 문서는 신뢰된 네트워크·VPN, SSH 또는 TLS 보호를 요구한다.</li>
</ul>



<p>소켓이 필요한 관리 도구는 공급망 위험도 함께 가진다. 이미지가 침해되면 공격자는 마운트된 socket을 사용해 호스트 파일시스템을 마운트한 새 컨테이너를 만들 수 있다. 따라서 이미지 digest 또는 명시적 버전 고정, 자동 업데이트 범위 제한, 내부 네트워크, 최소 endpoint 허용, 로그 보존을 함께 적용해야 한다.</p>



<h2 class="wp-block-heading">배포 전 체크리스트</h2>



<figure class="wp-block-table"><table><thead><tr><th>확인 항목</th><th>통과 기준</th></tr></thead><tbody><tr><td>실제 daemon</td><td>rootful·rootless·Desktop 중 어느 daemon인지 명확하다.</td></tr><tr><td>소켓 경로</td><td>호스트에 존재하며 컨테이너에도 의도한 경로로 보인다.</td></tr><tr><td>숫자 GID</td><td>호스트 socket GID가 컨테이너 프로세스의 보조 그룹에 있다.</td></tr><tr><td>권한 범위</td><td>직접 socket 전체 접근이 꼭 필요한 이유가 문서화됐다.</td></tr><tr><td>네트워크</td><td>proxy 또는 TCP endpoint가 공개 인터넷에 노출되지 않는다.</td></tr><tr><td>실패 검증</td><td>허용 작업은 성공하고 금지한 POST·endpoint는 실제로 거부된다.</td></tr><tr><td>재배포</td><td>호스트 교체·재부팅 뒤 GID와 socket 경로를 다시 계산한다.</td></tr></tbody></table></figure>



<p>개인 서버의 전체 메모리와 장애 반경도 함께 점검하려면 <a href="https://blog.kwt.co.kr/docker-compose-memory-limit-oom-guide/">Docker Compose 메모리 제한과 OOM 가이드</a>를 연결해 보면 된다. 서버 사양 자체가 빠듯하다면 <a href="https://blog.kwt.co.kr/vps-sizing-guide-1gb-2gb-4gb/">1GB·2GB·4GB VPS 사양 선택법</a>에서 컨테이너별 메모리 예산을 먼저 잡는 편이 낫다.</p>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">docker 그룹에 사용자를 추가하면 안전한가</h3>



<p>일반 사용자보다 편리하지만 일반 권한은 아니다. Docker 공식 문서는 <code>docker</code> 그룹이 root 수준 권한을 부여한다고 경고한다. 신뢰된 운영 사용자로 제한하고, 서비스 컨테이너에는 필요한 경우에만 숫자 GID를 전달해야 한다.</p>



<h3 class="wp-block-heading">소켓을 :ro로 마운트하면 컨테이너 생성이 막히나</h3>



<p>그렇게 가정하면 안 된다. bind mount의 읽기 전용과 Docker API의 읽기 전용 인가는 다른 문제다. 쓰기 요청을 차단하려면 socket proxy에서 <code>POST=0</code>과 endpoint 허용 목록을 적용하고 실제 거부 응답을 테스트해야 한다.</p>



<h3 class="wp-block-heading">group_add를 넣었는데도 permission denied가 계속되면 무엇을 보나</h3>



<p>컨테이너가 재생성됐는지, 실행 프로세스의 <code>id</code>에 해당 숫자 그룹이 있는지, 마운트된 socket GID가 같은지 확인한다. 그다음 rootless 경로 혼동과 SELinux·AppArmor 감사 로그를 확인한다.</p>



<h3 class="wp-block-heading">Docker-in-Docker가 더 안전한 대안인가</h3>



<p>항상 그렇지 않다. 별도 daemon으로 격리할 수 있지만 저장소·캐시·네트워크·privileged 요구와 운영 복잡성이 생긴다. 호스트 daemon 제어가 필요 없는 CI 빌드라면 rootless builder나 전용 빌드 서비스를 포함해 요구사항별로 비교해야 한다.</p>



<h2 class="wp-block-heading">참고 자료</h2>



<ul class="wp-block-list">
<li><a href="https://docs.docker.com/engine/install/linux-postinstall/">Docker Engine Linux post-installation</a></li>



<li><a href="https://docs.docker.com/engine/security/">Docker Engine security</a></li>



<li><a href="https://docs.docker.com/engine/security/rootless/">Docker Rootless mode</a></li>



<li><a href="https://docs.docker.com/reference/compose-file/services/#group_add">Docker Compose group_add 명세</a></li>



<li><a href="https://docs.docker.com/reference/cli/docker/container/run/#group-add">docker run 및 socket 전체 접근 설명</a></li>



<li><a href="https://github.com/Tecnativa/docker-socket-proxy">Tecnativa docker-socket-proxy</a></li>



<li><a href="https://github.com/getarcaneapp/arcane/issues/3693">Arcane docker.sock 경로·GID 관련 공개 이슈</a></li>



<li><a href="https://github.com/elie222/rakazo/issues/134">Windows named pipe 대체 경로 관련 공개 이슈</a></li>
</ul>



<p>문서와 공개 이슈 확인 기준일은 2026년 8월 27일이다. 배포판, Docker Engine·Desktop 실행 방식, 보안 모듈과 사용하는 관리 도구에 따라 socket 경로와 필요한 API 범위가 달라질 수 있다.</p>



<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"docker 그룹에 사용자를 추가하면 안전한가","acceptedAnswer":{"@type":"Answer","text":"Docker 그룹은 root 수준 권한을 부여하므로 신뢰된 운영 사용자로 제한하고 서비스에는 필요한 경우에만 GID를 전달해야 한다."}},{"@type":"Question","name":"소켓을 :ro로 마운트하면 컨테이너 생성이 막히나","acceptedAnswer":{"@type":"Answer","text":"bind mount 읽기 전용은 Docker API 인가가 아니다. proxy에서 POST와 endpoint를 제한하고 거부 응답을 검증해야 한다."}},{"@type":"Question","name":"group_add 뒤에도 permission denied가 계속되면 무엇을 보나","acceptedAnswer":{"@type":"Answer","text":"재생성 여부, 프로세스 보조 그룹, socket 숫자 GID, rootless 경로, SELinux와 AppArmor 로그를 순서대로 확인한다."}},{"@type":"Question","name":"Docker-in-Docker가 더 안전한 대안인가","acceptedAnswer":{"@type":"Answer","text":"항상 그렇지 않다. 별도 daemon 격리와 privileged 요구, 저장소와 네트워크 운영 복잡성을 함께 비교해야 한다."}}]}</script>
		<div class="wpulike wpulike-robeen " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="Like Button"
					data-ulike-id="2815"
					data-ulike-nonce="28815ea3cc"
					data-ulike-type="post"
					data-ulike-template="wpulike-robeen"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_2815"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	<p>The post <a href="https://blog.kwt.co.kr/docker-sock-permission-denied-safe-fix/">docker.sock permission denied 해결: chmod 666 없이 안전하게 고치는 법</a> appeared first on <a href="https://blog.kwt.co.kr"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kwt.co.kr/docker-sock-permission-denied-safe-fix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
