Có một số điều trong thiết lập của bạn mà tôi sẽ làm khác đi và tôi sẽ cố gắng phác thảo điều này trong câu trả lời của mình. Tôi không thể đảm bảo nó sẽ hoạt động, nhưng đó là cách tôi thiết lập vùng chứa của mình, vì vậy hy vọng nó có thể hữu ích.
Đầu tiên, tôi sẽ không gắn đĩa dữ liệu của mình với uid
và gid
thuộc tính. Tôi sẽ gắn kết với các thuộc tính mặc định, như thế này:
UUID=MY_UUID /home/user/my_mount_point auto umask=022,mặc định 0 1
(Từ thời điểm này trở đi, tôi sẽ sử dụng /home/user/my_mount_point
như một tài liệu tham khảo từ nơi đĩa của bạn được gắn kết.)
Thứ hai, tôi không hiểu tài liệu tham khảo khối lượng của bạn trong docker-compose.yml
. Tôi sẽ có nó như thế này:
khối lượng:
- /home/user/my_mount_point/db-volume-folder/db-one:/var/lib/mysql
Lưu ý rằng tôi sẽ luôn sử dụng một đường dẫn tuyệt đối trong docker-compose.yml
.
Ngoài ra, quyền sở hữu phải khớp với quyền sở hữu của vùng chứa đang chạy, vì vậy thư mục db-one
nên được sở hữu bởi root.
myUser@ubuntu:~/my_mount_point/db-volume-folder$
gốc drwxr-xr-x 3 gốc 4028276 ngày 26 tháng 7 04:47 db-one
Lưu ý rằng tên thư mục db-one
nên phù hợp với thư mục cuối cùng trên bên trái trong đường dẫn gắn ổ đĩa - đây là thư mục chứa các quyền quan trọng.
Cuối cùng, như bạn đã lưu ý, docker-compose cũng hỗ trợ bạn chỉ định người dùng mà vùng chứa sẽ chạy. Vì vậy, tôi tin rằng bạn có thể thay đổi người dùng và sau đó thay đổi quyền sở hữu cho phù hợp.
Vì vậy, nếu bạn thay đổi người dùng như thế này:
phiên bản: "3.7"
dịch vụ:
my_sql_db:
container_name: my_sql_db
người dùng: myUser
Và sau đó các quyền của thư mục phù hợp:
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 myUser myUser 4028276 ngày 26 tháng 7 04:47 db-one
Tôi hy vọng một số hướng dẫn này sẽ phù hợp với bạn - vui lòng cho chúng tôi biết nếu có.
CHỈNH SỬA:
Tôi vừa kiểm tra vùng chứa MySql với docker-compose.yml sau:
phiên bản: "3.7"
dịch vụ:
my_sql_db:
container_name: my_sql_db
người dùng: gốc
hình ảnh: mysql/mysql-server: mới nhất
cổng:
- "1533:3306"
môi trường:
MYSQL_ROOT_PASSWORD: bí mật hàng đầu
MYSQL_USER: mysqluser
MYSQL_PASSWORD: mật khẩu mysql
khối lượng:
- /mnt/zfs/docker-data/mysql-test/db-one:/var/lib/mysql
khởi động lại: luôn luôn
Đây là nội dung của thư mục /mnt/zfs/docker-data/mysql-test
:
/mnt/zfs/docker-data/mysql-test$ ls -la
tổng số 7
drwxr-xr-x 3 gốc gốc 4 ngày 1 tháng 8 22:02 .
drwxr-xr-x 22 root root 22 ngày 1 tháng 8 21:47 ..
drwxr-xr-x 6 27 sudo 30 ngày 1 tháng 8 21:59 db-one
-rw-r--r-- 1 gốc gốc 374 ngày 1 tháng 8 21:58 docker-compose.yml
Bằng cách này, container xuất hiện thành công. Có vẻ như container tự thay đổi quyền sở hữu thành 27:sudo
(Tôi đoán đây là những giá trị mặc định).
Nếu tôi thay đổi người dùng trong docker-compose.yml
đến người dùng của tôi:người dùng của tôi
và cũng thay đổi quyền trên thư mục db-one
đến người dùng của tôi:người dùng của tôi
, tôi gặp lỗi này khi cố gắng khởi động vùng chứa:
LỖI: đối với my_sql_db Không thể bắt đầu dịch vụ my_sql_db: không thể tìm thấy người dùng myuser: không có mục nào phù hợp trong tệp mật khẩu
Vì vậy, có vẻ như vấn đề là giữa những người dùng phù hợp chứ không phải quyền sở hữu hệ thống tệp. Và nếu bạn gặp lỗi khác, thì đó có thể là lỗi khác ngoài quyền sở hữu hệ thống tệp - hãy xem liên kết của tôi trong nhận xét.