Điểm:1

Không thể tạo bộ chứa Docker có ổ đĩa được gắn từ thư mục do người dùng tạo trong thư mục gốc của máy chủ ubuntu (EC2)

lá cờ in

Tôi muốn tạo bộ chứa Docker có ổ đĩa được gắn từ thư mục do người dùng tạo trong thư mục gốc của máy chủ Docker. Máy chủ lưu trữ là phiên bản Ubuntu EC2.

Lỗi

Tôi muốn gắn kết /dữ liệu thư mục bên dưới trong bộ chứa Docker, nhưng tôi gặp lỗi hiển thị:

Ubuntu:~$ ls -l /
tổng cộng 120
drwxr-xr-x 25 gốc gốc 4096 ngày 10 tháng 8 20:51 ./
drwxr-xr-x 25 gốc gốc 4096 ngày 10 tháng 8 20:51 ../
drwxr-xr-x 2 gốc gốc 4096 ngày 22 tháng 7 13:50 bin/
drwxr-xr-x 3 gốc gốc 4096 ngày 22 tháng 7 13:50 khởi động/
drwxr-xr-x 4 ubuntu ubuntu 4096 ngày 10 tháng 8 19:58 dữ liệu/
...
drwxr-xr-x 8 gốc gốc 4096 ngày 30 tháng 5 12:19 trang chủ/
...
drwxr-xr-x 3 root root 4096 20 tháng 6 13:39 mnt/
...
drwxr-xr-x 12 gốc gốc 4096 ngày 12 tháng 6 01:03 usr/
ubuntu:~$ docker run -it --rm -v /data:/data alpine
docker: Phản hồi lỗi từ daemon: lỗi trong khi tạo đường dẫn nguồn gắn kết '/data': mkdir/data: hệ thống tệp chỉ đọc.

Lệnh tương tự hoạt động nếu tôi sử dụng một thư mục đi kèm với phiên bản (ví dụ: /usr):

ubuntu:~$ docker run -it --rm -v /usr:/data alpine 
/# ls/dữ liệu
trò chơi bin bao gồm lib lib32 local sbin share src

thông tin thêm

Tôi gặp lỗi tương tự, ngay cả khi tôi làm như sau:

  1. sử dụng --mount thay vì -v, ngay cả với chỉ đọc Tùy chọn.
  2. Thực hiện lệnh trên với sudo.
  3. Đã thay đổi quyền trên /dữ liệu thư mục đến 777
  4. Đã thay đổi quyền sở hữu từ Ubuntu đến nguồn gốc
  5. Gắn kết một thư mục con như /data/thư mục con.

Các df lệnh chỉ ra rằng không có mount đặc biệt nào trên thư mục gốc của thể hiện:

Ubuntu:~$ df -h
Kích thước hệ thống tệp được sử dụng Sẵn có Sử dụng % Được gắn trên
udev 7,9G 0 7,9G 0%/dev
tmpfs 1.6G 872K 1.6G 1%/lần chạy
/dev/xvda1 194G 180G 14G 93%/
tmpfs 7,9G 0 7,9G 0%/dev/shm
tmpfs 5,0M 0 5,0M 0%/chạy/khóa
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%/chạy/người dùng/1000

Trình nền docker đang chạy với quyền 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
gốc 1302 1 0 19:49? 00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Ubuntu 6868 2649 0 21:20 điểm/1 00:00:00 grep --color=auto dockerd

Cảm ơn trước. Đây là một vấn đề khó chịu và tôi đã nghĩ rằng nó sẽ dễ dàng trong Docker và AWS/EC2.

Điểm:1
lá cờ cz

Ghi chú: Câu trả lời này chỉ áp dụng cho Ubuntu (và ở một mức độ nào đó là các bản phân phối phái sinh). Nó không nên được áp dụng cho bất kỳ bản phân phối nào khác.

Nguyên nhân sâu xa của vấn đề là do bạn đã cài đặt và chạy Docker nhanh chóng, và hầu hết mọi người không nên chạy nó theo cách này. Khi một chương trình bị giới hạn bởi snap bắt đầu, snapd sẽ tạo một vùng chứa để chạy chương trình trong đó và chỉ những tệp có thể truy cập được khi chương trình được khởi động mới có thể truy cập được vào chương trình. Điều này bao gồm thư mục mới của bạn /dữ liệu, không tồn tại trong bộ chứa snap mà docker đang chạy, đó là lý do tại sao docker cố gắng (và không thành công) để tạo nó.

Phiên bản của docker đi kèm với Ubuntu cũng không nên được sử dụng, vì nó không được cập nhật. (Họ thực sự nên giữ cho nó được cập nhật hoặc bỏ nó hoàn toàn, nhưng đừng tin rằng cả hai điều đó sẽ xảy ra sớm.)

Hầu hết mọi người nên sử dụng Docker từ kho Docker chính thức để tránh nhiều vấn đề nảy sinh với các gói docker của Ubuntu.

lá cờ in
Điều này rất hữu ích. Khi bạn nói "Khi chương trình bị giới hạn bởi snap bắt đầu, snapd sẽ tạo vùng chứa để chạy chương trình trong đó", tôi đã hy vọng rằng nếu tôi khởi động lại, Docker sẽ thấy thư mục mới (ví dụ:/data). Tuy nhiên, đó không phải là trường hợp. Tuy nhiên, nó hoạt động nếu tôi đặt thư mục vào/mnt (ví dụ:/mnt/data). Tại sao lại thế này? Có cái gì tôi có thể đọc để giúp tôi hiểu?
Michael Hampton avatar
lá cờ cz
@mherzog Tôi nghĩ rằng snap có một danh sách các thư mục cụ thể mà nó sẽ hiển thị cho chương trình chứa trong đó. Nhưng theo nguyên tắc chung, tôi tránh chụp nhanh.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.