我原以为我理解了文档,但可能并非如此。我认为
在官方MySQL Docker镜像中,这个功能是可行的。可以将
我编写了一个sphinxsearch-2.2.9的Docker文件,只是为了练习和学习理解,以下是它:
非常简单易懂,容易掌握。我将sphinx生成的/etc和/var目录分配给VOLUME命令,并认为这将允许我执行如下操作:
以下是我在所在目录中运行的命令以创建docker文件:
提前感谢你的帮助。
-v /HOST/PATH:/CONTAINER/PATH
标志是双向的。如果容器中有文件或目录,则它们会在主机上镜像,这样即使移除Docker容器,我们也能保留目录和文件。在官方MySQL Docker镜像中,这个功能是可行的。可以将
/var/lib/mysql
绑定到主机上,并在重新启动和替换容器时保留数据。我编写了一个sphinxsearch-2.2.9的Docker文件,只是为了练习和学习理解,以下是它:
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
非常简单易懂,容易掌握。我将sphinx生成的/etc和/var目录分配给VOLUME命令,并认为这将允许我执行如下操作:
-v ~/dev/sphinx/etc:/usr/local/sphinx/etc -v ~/dev/sphinx/var:/usr/local/sphinx/var
,但实际上不是这样的,它会覆盖容器内的目录并使其为空白。当我删除-v标志并创建容器后,目录中有预期的文件并且不会被覆盖。以下是我在所在目录中运行的命令以创建docker文件:
docker build -t sphinxsearch .
一旦我创建了这个,我会执行以下步骤来创建一个基于该映像的容器:docker run -it --hostname some-sphinx --name some-sphinx --volume ~/dev/docker/some-sphinx/etc:/usr/local/sphinx/etc -d sphinxsearch
我真的很感谢任何帮助和见解,以便使这项工作。我查看了MySQL图像,并没有看到他们对使目录可绑定做出任何神奇的事情,他们使用了VOLUME。提前感谢你的帮助。