본문 바로가기

개발 & IT/백엔드

Ubuntu 서버에서 Docker / Laravel Sail 문제 해결 기록

Ubuntu 서버에서 Laravel Sail 실행이 안 되는 문제가 발생했습니다. 겉보기엔 다른 두 가지 문제였지만, 실제로는 Docker 환경이 꼬이면서 연쇄적으로 발생한 문제였습니다.


문제 1. Docker 데몬이 실행 중인데 명령어가 실패

현상

$ docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
Is the docker daemon running?

$ sudo systemctl status docker
Active: active (running)  # 서비스는 실행 중

권한도 정상, 서비스도 정상인데 Docker 명령어가 모두 실패했습니다.

원인

$ ps -ef | grep dockerd
/usr/bin/dockerd ...              # APT Docker
dockerd --exec-root=/run/snap.docker ...  # Snap Docker

Docker 데몬이 2개 실행 중이었습니다. APT와 Snap으로 중복 설치되어 서로 충돌하는 상태였습니다.

해결

# Snap Docker 제거
sudo snap stop docker
sudo snap remove docker
sudo pkill -f snap.docker

# Docker 재시작
sudo systemctl restart containerd
sudo systemctl restart docker

# 확인
$ ps -ef | grep dockerd
/usr/bin/dockerd   # 하나만 실행 중

문제 2. Sail 실행 시 모든 컨테이너가 context canceled 실패

현상

$ ./vendor/bin/sail up
redis   Error   Get "https://registry-1.docker.io/v2/": Bad Request
mysql   Error   context canceled
nginx   Error   context canceled

모든 서비스가 즉시 실패하고 Docker Hub 접근이 안 됩니다.

원인 추적

# 서버에서 직접 접속하면?
$ curl -I https://registry-1.docker.io/v2/
HTTP/2 401 Unauthorized  # 정상 (인증 필요)

# Docker 데몬 설정 확인
$ sudo systemctl show docker --property=Environment
HTTP_PROXY=0.0.0.0:80
HTTPS_PROXY=0.0.0.0:80

curl은 되는데 Docker는 안 됩니다. 잘못된 프록시 설정이 문제였습니다.

0.0.0.0은 "모든 인터페이스"를 의미하는 특수 주소로, 프록시 서버 주소가 아닙니다. Docker 데몬이 존재하지 않는 프록시로 모든 요청을 보내려다 실패한 것입니다.

해결

# 프록시 설정 제거
sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker

# 확인
$ sudo systemctl show docker --property=Environment
Environment=  # 비어있음

# 테스트
$ docker pull hello-world
Status: Downloaded newer image for hello-world:latest

# Sail 실행
$ ./vendor/bin/sail up -d
[+] Running 5/5
 ✔ Container project-redis-1    Started
 ✔ Container project-mysql-1    Started
 ...

정리

발생한 문제:

  1. Docker 데몬 2개 실행 (APT + Snap 충돌)
  2. 잘못된 프록시 설정 (0.0.0.0:80)

해결:

  • Snap Docker 제거
  • 프록시 설정 제거

결과:

  • Ubuntu에서 Docker 설치 방법은 하나로 통일 (APT 권장)
  • curl은 되는데 Docker는 안 되면 → 프록시 설정 의심
  • context canceled는 결과이지 원인이 아닐 수 있음
반응형