Không thể gắn thư mục docker vào máy chủ bằng cách sử dụng docker-compose


7

Ở đây tôi đã tạo ra docker container sử dụng mariadbhình ảnh và tạo ra ba tập như dưới đây.

docker-compose.yml

version: '2.0'

services:
  mariadb:
  image: mariadb:latest
  restart: always
  container_name: mariadb
  environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=testdb
  ports:
   - 3307:3306
  volumes:
   - ./database:/var/lib/mysql
   - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:ro
   - ./logs:/var/log/mysql

Hai tập đầu tiên hoạt động thành công nhưng tôi không thể tìm thấy các tệp nhật ký mariadb vào logsthư mục. Tôi dường như logsthư mục hiển thị trống trên máy chủ cũng như trên container (/ var / log / mysql). Tôi nghĩ thư mục máy chủ ghi đè vào hệ thống tập tin docker.

Nếu tôi loại bỏ âm lượng này ( ./logs:/var/log/mysql) khỏi docker-compose thì các tệp nhật ký sẽ hiển thị trên container.

Kế hoạch của tôi là gắn /var/log/mysql/thư mục vào máy cục bộ.

Cảm ơn !


Hãy thử chmod 777 /var/log/mysqltrên máy chủ của bạn, tôi cá là daemon của bạn đang chạy vì mysqlngười dùng không có quyền để viết trong thư mục này trên máy chủ của bạn. Sau đó, bạn sẽ phải tìm id người dùng mysql bên trong container chownđể tránh cho mọi người đọc bản ghi db của bạn.
Tensibai

Có lẽ selinux hoặc apparmor đã được kích hoạt
030

Tôi đang sử dụng Debianos và apparmor đã hủy kích hoạt.
Nullpulum

Câu trả lời:



3

Nếu bạn đang chạy một bản phân phối dựa trên RedHat, ví dụ Fedora hoặc CentOS, bạn có thể bật Selinux theo mặc định. Bạn có thể tự động cho phép các thùng chứa của mình truy cập các tệp trên máy chủ bằng cách gắn với :Ztùy chọn, như vậy:

  volumes:
   - ./database:/var/lib/mysql:Z
   - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z
   - ./logs:/var/log/mysql:Z

1

Nếu /var/log/mysql:/var/log/mysqlđược định nghĩa là một ổ thì nội dung nằm trong bộ chứa /var/log/mysql/sẽ được lưu trong /var/log/mysql/thư mục trên máy chủ.

Có thể là không thể gắn kết /var/lib/mysqlvì SElinux hoặc áo giáp ứng dụng đang ngăn chặn điều này.

https://hub.docker.com/_/mysql/

Lưu ý rằng người dùng trên các hệ thống máy chủ có bật Selinux có thể thấy sự cố với điều này. Cách giải quyết hiện tại là gán loại chính sách SELinux có liên quan cho thư mục dữ liệu mới để bộ chứa sẽ được phép truy cập vào nó:

$ chcon -Rt svirt_sandbox_file_t /my/own/datadir

vâng tôi đồng ý, ./databaseâm lượng hoạt động tốt và thậm chí tôi tạo tập tin trên ./logsthư mục trên máy chủ thì nó sẽ hiển thị trên container nhưng âm lượng không hoạt động theo thứ tự đảo ngược.
Nullpulum

Ví dụ, nếu bộ chứa mysql từ dockerhub được chạy và cơ sở dữ liệu được lưu trữ trong / var / lib / mysql, thì bộ chứa được khởi động lại thì cơ sở dữ liệu cư trú trên máy chủ cũng sẽ được tìm thấy trong bộ chứa
030
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.