Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Docker Machine trên Mac:Không thể nhìn thấy Khối lượng được gắn trên máy chủ docker / docker-machine? Khối lượng được lưu trữ ở đâu?

Được rồi, có một vài điểm cần được giải quyết ở đây.

Hãy bắt đầu với khối lượng bộ dock là gì (Hãy cố gắng không nghĩ về macbook của bạn hoặc máy lang thang tại thời điểm này. Chỉ cần lưu ý đến thực tế là bộ dock sử dụng một hệ thống tệp khác, nơi nó có thể nằm ở thời điểm này):Có thể tưởng tượng nó giống như thế này, bản thân mỗi ổ đĩa trong Docker chỉ là một phần của trình docker hệ thống tệp nội bộ sử dụng. Vùng chứa có thể sử dụng các ổ đĩa này, giống như chúng là "ổ cứng nhỏ" có thể được gắn kết bởi chúng và cũng được chia sẻ giữa chúng ( hoặc được gắn kết bởi hai trong số họ cùng một lúc, như gắn một phiên bản siêu nhanh của một số máy chủ ftp với hai máy khách hoặc bất cứ thứ gì:P).

Về cơ bản, bạn có thể khai báo các khối lượng này (vẫn không nghĩ đến máy tính của bạn / chính bản thân nó, chỉ là bộ ghép nối;)) thông qua hướng dẫn VOLUME của Dockerfile. Ví dụ tiêu chuẩn, chạy một vùng chứa máy chủ web như sau:

FROM: nginx
VOLUME /www

Giờ đây, mọi thứ đi vào / www về lý thuyết đều có thể được gắn kết và ngắt kết nối khỏi một vùng chứa và cũng có thể được gắn vào nhiều vùng chứa. Bây giờ chỉ riêng Nginx đã nhàm chán, vì vậy chúng tôi muốn chạy php trên các tệp mà nginx lưu trữ để tạo ra một số nội dung thú vị hơn. => Chúng tôi cần gắn khối lượng đó vào một số vùng chứa php-fpm.

web:
  image: nginx
php:
  image: php-fpm
  volumes_from:
    - web

=> thì đấy! mọi thư mục được khai báo bởi chỉ thị VOLUME trong vùng chứa nginx / web sẽ hiển thị trong php một. Điểm quan trọng cần lưu ý ở đây, bất cứ thứ gì có trong nginx's / www, sẽ ghi đè lên bất cứ thứ gì php có trong /www.Nếu bạn đặt:ro, php thậm chí không thể ghi vào thư mục đó :)

Bây giờ chuyển đến gần vấn đề của bạn, có một cách thứ hai để khai báo khối lượng mà không yêu cầu chúng được khai báo trong Dockerfile. Điều này có thể được thực hiện bằng cách gắn các ổ đĩa từ máy chủ lưu trữ (trong trường hợp này là việc của bạn vagrant / boo2docker). Trước tiên, hãy thảo luận về điều này như thể chúng ta đang chạy trên một Linux gốc.

Nếu bạn đặt một cái gì đó như:

volumes:
 - /home/myuser/folder:/folder

trong docker-compo.yml của bạn, thì điều này có nghĩa là thư mục / home / myuser / bây giờ sẽ được gắn vào docker. Nó sẽ ghi đè bất cứ thứ gì mà docker có trong thư mục / và giống như / www cũng có thể truy cập được từ thứ đã khai báo nó. Bây giờ máy Linux đang chạy trình nền docker.

Quá nhiều cho lý thuyết :), trên thực tế, bạn có thể chỉ cần những lời khuyên sau đây để mọi thứ của bạn diễn ra tốt đẹp :):

Cách boot2docker / docker-machine / kitematic và tất cả những thứ này giải quyết vấn đề rất đơn giản, trước hết chúng chỉ gắn một ổ đĩa trong máy vagrant vào các bộ chứa docker và chúng cũng chỉ gắn kết thứ này vào hệ thống tệp Mac của bạn. , hy vọng mọi chuyện sẽ suôn sẻ:P

Bây giờ đối với vấn đề thực tế mà tất cả chúng ta sử dụng điều này (hoặc chỉ cố gắng giúp đồng nghiệp của họ vào thế giới của Docker ngọt ngào:P) trên Mac đang phải đối mặt là quyền. Ý tôi là hãy nghĩ về điều đó (root hoặc một số người dùng khác xử lý các tệp trong vùng chứa, người dùng lang thang có thể xử lý các tệp trong máy chủ lưu trữ và sau đó người dùng Mac của bạn "skalfyfan" xử lý các tệp đó trong Mac. Tất cả họ đều có id người dùng khác nhau và whatnot => nhiều vấn đề xảy ra với điều đó và phần nào tùy thuộc vào những gì bạn đang thực sự chạy trong Docker. Mysql và Apache đặc biệt gây khó khăn vì chúng không chạy dưới quyền root trong vùng chứa. Điều này có nghĩa là chúng thường gặp khó khăn khi ghi vào tệp Mac hệ thống.

Trước khi thử cách tiếp cận thứ hai bên dưới, chỉ cần thử đặt khối lượng vùng chứa của bạn trong thư mục chính Mac của bạn. Điều này sẽ giải quyết các vấn đề với MySQL trong hầu hết các trường hợp như tôi đã tìm thấy theo thời gian. Btw: Không cần khai báo đường dẫn đầy đủ đến các ổ ./folder là được và đọc liên quan đến vị trí của docker-comp.yml của bạn!

Chỉ cần đặt compile-yml vào thư mục người dùng Mac của bạn, đó là tất cả những gì quan trọng. Không có chmod 777 -R:P sẽ giúp bạn ở đây, nó chỉ cần nằm trong thư mục home của bạn :)

Tuy nhiên, một số ứng dụng (ví dụ như Apache) vẫn sẽ khiến bạn gặp khó khăn. Thực tế là id người dùng của bất kỳ thứ gì chạy trong vùng chứa khác với id người dùng Mac của bạn sẽ khiến cuộc sống của bạn trở nên địa ngục. Để giải quyết vấn đề này, bạn cần điều chỉnh id người dùng cũng như nhóm người dùng theo cách không xung đột với quyền của máy Mac của bạn. Nhóm bạn muốn trên máy Mac là nhân viên, ví dụ UID hoạt động sẽ là 1000. Do đó, bạn có thể đặt nhóm này ở cuối Dockerfile của mình:

RUN usermod -u 1000 www-data
RUN usermod -G staff www-data

hoặc

RUN usermod -u 1000 mysql
RUN usermod -G staff mysql

Vì vậy, như bạn đã học bây giờ:

Đúng rồi, nó làm được điều đó :)

Cái này bạn đã nhầm :) Như đã giải thích, nếu bạn không cung cấp thư mục máy chủ, thì Docker sẽ duy trì đường dẫn này. Nhưng chỉ cho vùng chứa này và tất cả sẽ nằm trong hệ thống tệp docker. Không có gì được viết cho máy chủ lưu trữ cả! Điều này sẽ luôn chỉ xảy ra nếu bạn đặt một thư mục máy chủ trước thư mục vùng chứa!

Hy vọng điều này sẽ giúp :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lệnh chuẩn bị sẵn trong PHP PDO - Truy vấn LIKE trong MySQL

  2. Mã hóa chuỗi thử thách trong Python

  3. Cách đổi tên hai bảng trong một hoạt động nguyên tử trong MySQL

  4. Cách cài đặt MySQL trên CentOS 7

  5. Hiểu các chế độ xem trong SQL