Tôi nghĩ rằng tôi đã hiểu các tài liệu, nhưng có lẽ tôi đã không. Tôi đã có ấn tượng rằng cờ -v /HOST/PATH:/CONTAINER/PATH
là hai chiều. Nếu chúng ta có tệp hoặc thư mục trong vùng chứa, chúng sẽ được nhân đôi trên máy chủ cho chúng ta một cách để giữ lại các thư mục và tệp ngay cả sau khi loại bỏ một vùng chứa docker.Docker - Mount Directory Từ Container đến Host
Trong hình ảnh Docker chính thức của MySQL, công trình này hoạt động. Các /var/lib/mysql
có thể được ràng buộc với máy chủ và tồn tại khởi động lại và thay thế container trong khi duy trì dữ liệu trên máy chủ.
Tôi đã viết một tập tin Docker cho sphinxsearch-2.2.9 cũng giống như một thực tế và vì lợi ích của việc học và sự hiểu biết, ở đây nó là:
FROM debian
ENV SPHINX_VERSION=2.2.9-release
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -yqq\
build-essential\
wget\
curl\
mysql-client\
libmysql++-dev\
libmysqlclient15-dev\
checkinstall
RUN wget http://sphinxsearch.com/files/sphinx-${SPHINX_VERSION}.tar.gz && tar xzvf sphinx-${SPHINX_VERSION}.tar.gz && rm sphinx-${SPHINX_VERSION}.tar.gz
RUN cd sphinx-${SPHINX_VERSION} && ./configure --prefix=/usr/local/sphinx
EXPOSE 9306 9312
RUN cd sphinx-${SPHINX_VERSION} && make
RUN cd sphinx-${SPHINX_VERSION} && make install
RUN rm -rf sphinx-${SPHINX_VERSION}
VOLUME /usr/local/sphinx/etc
VOLUME /usr/local/sphinx/var
Rất đơn giản và dễ dàng để có được đầu của bạn được bao bọc xung quanh trong khi học tập. Tôi chỉ định/etc &/var thư mục từ việc xây dựng nhân sư để lệnh VOLUME nghĩ rằng nó sẽ cho phép tôi làm một cái gì đó như -v ~/dev/sphinx/etc:/usr/local/sphinx/etc -v ~/dev/sphinx/var:/usr/local/sphinx/var
, nhưng nó không phải, thay vào đó nó ghi đè lên các thư mục bên trong container và để trống. Khi tôi xóa cờ -v và tạo vùng chứa, các thư mục có các tệp dự kiến và chúng không bị ghi đè.
Đây là những gì tôi chạy để tạo ra các tập tin Docker sau khi điều hướng đến thư mục mà nó ở: docker build -t sphinxsearch .
Và một khi tôi có đã tạo ra, tôi làm như sau để tạo ra một container dựa trên hình ảnh đó: docker run -it --hostname some-sphinx --name some-sphinx --volume ~/dev/docker/some-sphinx/etc:/usr/local/sphinx/etc -d sphinxsearch
Tôi thực sự đánh giá cao sự giúp đỡ và thông tin chi tiết về cách làm việc này. Tôi nhìn vào hình ảnh MySQL và không thấy bất cứ điều gì huyền diệu mà họ đã làm để làm cho các thư mục bindable, họ sử dụng VOLUME.
Cảm ơn bạn trước.
Bạn nhận ra rằng trong Dockerfile, "VOLUME/usr/local/sphinx/etc" không giống với docker run -v/usr/local/sphinx/etc:/usr/local/sphinx/etc "don Các bạn trước đây bỏ qua hệ thống tập tin phân lớp, sau đó ánh xạ nó vào một con đường mà bạn chọn trên máy chủ, thường là cả hai được sử dụng cùng nhau – Matt
Vâng, tôi đã nhận thức được điều đó.Tôi muốn truy cập các thư mục từ thùng chứa đó là cách duy nhất tôi có thể nghĩ về cách làm điều đó Tôi đăng trên diễn đàn docker và không nhận được sự giúp đỡ hay lời khuyên nào, đây là kết quả của việc chơi đùa với nó và –