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
...
정리
발생한 문제:
- Docker 데몬 2개 실행 (APT + Snap 충돌)
- 잘못된 프록시 설정 (0.0.0.0:80)
해결:
- Snap Docker 제거
- 프록시 설정 제거
결과:
- Ubuntu에서 Docker 설치 방법은 하나로 통일 (APT 권장)
- curl은 되는데 Docker는 안 되면 → 프록시 설정 의심
- context canceled는 결과이지 원인이 아닐 수 있음
반응형
'개발 & IT > 백엔드' 카테고리의 다른 글
| Laravel 운영 서버에서 env() 함수가 null을 반환하는 이유 (0) | 2025.12.03 |
|---|---|
| MySQL 타임존 SYSTEM 설정과 UTC 저장 문제 해결하기 (0) | 2025.10.30 |
| Sequelize vs Prisma: Node.js ORM 비교 분석 (0) | 2025.10.26 |
| Prisma로 Next.js 블로그 만들기: 데이터베이스 설정부터 마이그레이션까지 (0) | 2025.10.26 |
| Let's Encrypt 인증서 자동 갱신 완벽 가이드 (1) | 2025.10.14 |