Amazon-Ec2
無法使用從 ubuntu 主機 (EC2) 根目錄中使用者創建的目錄安裝的捲創建 Docker 容器
我想創建一個 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 守護程序以 root 身份執行:
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 中會很容易。
***注意:*此答案僅適用於 Ubuntu(以及在某種程度上衍生髮行版)。它不應該應用於任何其他發行版。
問題的根本原因是你已經快速安裝並執行了 Docker,大多數人不應該這樣執行它。當一個被 snap 限制的程序啟動時,snapd 會創建一個容器來執行該程序,並且只有在程序啟動時可以訪問的文件才能被程序訪問。這包括您的新目錄
/data
,它在 docker 正在執行的 snap 容器中不存在,這就是 docker 嘗試(並且失敗)創建它的原因。也不應該使用 Ubuntu 自帶的 docker 版本,因為它沒有保持最新。(他們真的應該保持更新或完全放棄它,但不要指望這兩種情況很快就會發生。)
大多數人應該使用官方 Docker 儲存庫中的 Docker,以避免 Ubuntu 的 docker 包出現的各種問題。