system infra/Docker

Docker Permission Denied Error (사용자를 docker 그룹에 추가), restart

Wave sea 2025. 3. 27. 08:14

Docker 권한 거부 오류 해결 방법

 

  1. 영구 솔루션(도커 그룹에 사용자 추가)
    매번 sudo를 사용하지 않으려면 사용자를 docker 그룹에 추가하세요:
    1. 도커 그룹이 없는 경우 해당 그룹을 만듭니다:
bash
Copy
sudo groupadd docker
  1. Add your user to the docker group:
bash
Copy
sudo usermod -aG docker $USER
  1. Apply the new group membership (either):
bash
Copy
newgrp docker

 

또는 로그아웃했다가 다시 로그인

  1. Verify it works:
bash
Copy
docker ps

 

Docker 컨테이너 시작 시 자동 실행 설정 방법

Docker 컨테이너를 컴퓨터 시작 시 자동으로 실행하도록 설정하는 방법은 다음과 같습니다.

1. --restart 옵션 사용 (가장 간단한 방법)

컨테이너 생성 시 --restart 옵션을 지정:

bash
Copy
docker run -d --restart unless-stopped [이미지_이름]

또는 기존 컨테이너에 적용하려면:

bash
Copy
docker update --restart unless-stopped [컨테이너_이름_또는_ID]

restart 옵션 종류:

  • no: 자동 재시작 안 함 (기본값)
  • on-failure: 오류 발생 시만 재시작
  • always: 항상 재시작
  • unless-stopped: 명시적으로 중지하지 않은 경우 재시작 (권장)

2. systemd 서비스로 등록 (더 세밀한 제어 가능)

  1. 서비스 파일 생성 (/etc/systemd/system/docker-[서비스명].service):
bash
Copy
sudo nano /etc/systemd/system/docker-mycontainer.service
  1. 다음 내용 추가 (예시):
ini
Copy
[Unit]
Description=My Docker Container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my_container
ExecStop=/usr/bin/docker stop -t 2 my_container

[Install]
WantedBy=multi-user.target
  1. 서비스 활성화:
bash
Copy
sudo systemctl enable docker-mycontainer.service
sudo systemctl start docker-mycontainer.service

3. Docker Compose 사용 시

docker-compose.yml 파일에서 restart 속성 설정:

yaml
Copy
version: '3'
services:
  my_service:
    image: my_image
    restart: unless-stopped

4. 호스트 OS의 자동 시작 스크립트 활용

  • Ubuntu: /etc/rc.local에 명령어 추가
  • systemd: 사용자 정의 서비스 생성

주의사항

  1. 컨테이너가 정상적으로 종료되도록 애플리케이션을 구성해야 합니다.
  2. Docker 서비스 자체가 시작될 때만 컨테이너가 실행되므로, Docker가 자동 시작되도록 설정되어 있어야 합니다.
  3. always와 unless-stopped의 차이:
    • always: docker stop으로 명시적으로 중지해도 재시작
    • unless-stopped: 한 번 명시적으로 중지하면 재시작하지 않음

가장 권장하는 방법은 --restart unless-stopped 옵션을 사용하는 것입니다.