%20%EB%A3%A8%ED%8A%B8%EC%9D%98%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%83%9D%EC%84%B1%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%EB%A7%88%EC%9A%B4%ED%8A%B8%EB%90%9C%20%EB%B3%BC%EB%A5%A8%EC%9C%BC%EB%A1%9C%20Docker%20%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
Docker 호스트 루트의 사용자 생성 디렉터리에서 볼륨이 마운트된 Docker 컨테이너를 생성하고 싶습니다. 호스트는 Ubuntu EC2 인스턴스입니다.
오류
/data
Docker 컨테이너에 아래 디렉터리를 탑재하고 싶지만 다음과 같은 오류가 표시됩니다.
ubuntu:~$ ls -l /
total 120
drwxr-xr-x 25 root root 4096 Aug 10 20:51 ./
drwxr-xr-x 25 root root 4096 Aug 10 20:51 ../
drwxr-xr-x 2 root root 4096 Jul 22 13:50 bin/
drwxr-xr-x 3 root root 4096 Jul 22 13:50 boot/
drwxr-xr-x 4 ubuntu ubuntu 4096 Aug 10 19:58 data/
...
drwxr-xr-x 8 root root 4096 May 30 12:19 home/
...
drwxr-xr-x 3 root root 4096 Jun 20 13:39 mnt/
...
drwxr-xr-x 12 root root 4096 Jun 12 01:03 usr/
ubuntu:~$ docker run -it --rm -v /data:/data alpine
docker: Error response from daemon: error while creating mount source path '/data': mkdir /data: read-only file system.
인스턴스와 함께 제공된 디렉토리(예 /usr
: )를 사용하는 경우에도 동일한 명령이 작동합니다.
ubuntu:~$ docker run -it --rm -v /usr:/data alpine
/ # ls /data
bin games include lib lib32 local sbin share src
추가 정보
다음을 수행해도 동일한 오류가 발생합니다.
- 옵션 을 사용해도
--mount
대신 사용합니다 .-v
readonly
- 로 위의 명령을 실행합니다
sudo
. /
및data
디렉토리에 대한 권한을 다음으로 변경했습니다 .777
- 소유권
ubuntu
이 에서 (으)로 변경되었습니다.root
- 와 같은 하위 디렉터리를 마운트합니다
/data/subdir
.
이 df
명령은 인스턴스 루트에 특별한 마운트가 없음을 나타냅니다.
ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 0 7.9G 0% /dev
tmpfs 1.6G 872K 1.6G 1% /run
/dev/xvda1 194G 180G 14G 93% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 132M 132M 0 100% /snap/docker/796
/dev/loop2 25M 25M 0 100% /snap/amazon-ssm-agent/4046
/dev/loop3 56M 56M 0 100% /snap/core18/2128
/dev/loop1 100M 100M 0 100% /snap/core/11316
/dev/loop4 100M 100M 0 100% /snap/core/11420
/dev/loop5 56M 56M 0 100% /snap/core18/2074
/dev/loop6 34M 34M 0 100% /snap/amazon-ssm-agent/3552
s3fs 256T 0 256T 0% /mnt/s3
tmpfs 1.6G 0 1.6G 0% /run/user/1000
docker 데몬이 루트로 실행 중입니다.
ubuntu:~/$ ps -ef | grep dockerd
root 964 1 1 19:49 ? 00:00:55 dockerd --group docker --exec-root=/run/snap.docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/run/snap.docker/docker.pid --config-file=/var/snap/docker/796/config/daemon.json
root 1302 1 0 19:49 ? 00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ubuntu 6868 2649 0 21:20 pts/1 00:00:00 grep --color=auto dockerd
미리 감사드립니다. 이것은 성가신 문제이며 Docker와 AWS/EC2에서는 쉬울 것이라고 생각했을 것입니다.
답변1
메모:이 답변은 Ubuntu(및 어느 정도 파생 배포판)에만 적용됩니다. 다른 배포판에는 적용하면 안 됩니다.
문제의 근본 원인은 Docker를 스냅으로 설치하고 실행했기 때문에 대부분의 사람들이 이런 방식으로 실행하면 안 된다는 것입니다. snap으로 제한된 프로그램이 시작되면 snapd는 프로그램을 실행할 컨테이너를 생성하고, 프로그램이 시작될 때 액세스할 수 있었던 파일만 프로그램에서 액세스할 수 있습니다. 여기 /data
에는 docker가 실행 중인 스냅 컨테이너에 존재하지 않는 새 디렉터리가 포함되며 , 이것이 docker가 해당 디렉터리를 생성하려고 시도하고 실패하는 이유입니다.
Ubuntu 자체와 함께 제공되는 Docker 버전도 최신 상태로 유지되지 않으므로 사용해서는 안 됩니다. (실제로 업데이트를 유지하거나 완전히 삭제해야 하지만, 어느 쪽도 곧 일어날 것이라고 기대하지 마십시오.)
대부분의 사람들이 사용해야 할공식 Docker 저장소의 DockerUbuntu의 도커 패키지에서 발생하는 다양한 문제를 방지합니다.