在dockerized mongodb上找不到mongodb配置文件

时间:2019-06-16 13:25:06

标签: linux mongodb docker

首先,我知道解决问题的方法会更简单,但是为了更好地了解docker,这是我要解决的问题,它是运行dockerized mongodb的方法。

我现在正在尝试通过获取已经存在的Dockerfile并对其进行修改来构建自己的mongodb docker映像。修改:我希望能够访问mongodb服务器使用的mongodb.conf文件。

这是我的Dockerfile。我只添加了一行VOLUME ["/etc"],并且更改了最后一行(添加了最后一个-f参数)。在不进行这些更改的情况下,构建映像并将其运行在容器中即可正常工作。

FROM debian:jessie-slim
RUN apt-get update && \
apt-get install -y ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18
RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
VOLUME ["/data/db"]
VOLUME ["/etc"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod", "--smallfiles", "-f /etc/mongodb.conf"]

但是,随着我的更改,构建的图像无法启动。它立即退出。 docker logs <container-name>给了我

Error reading config file: No such file or directory
try 'mongod --help' for more information

我使用了运行命令 docker run -p 37017:27017 -d -v /tmp/mongodb/data:/data/db -v /tmp/mongodb/etc:/etc mongo-image,并希望可以找到位于我的主机系统上/tmp/mongodb/etc/mongodb.conf的文件(是的,它存在于此,我将其放置在此处)。

我在做什么错?我是Docker的新手,我想我可能弄乱了容量吗?

2 个答案:

答案 0 :(得分:0)

您无需指定以下行:

VOLUME ["/data/db"]
VOLUME ["/etc"]

您的dockerfile中的VOLUME在主机上的/var/lib/docker/volumes下创建了单独的目录,有关更多信息,请检查this

-v命令中的

docker run选项应该足以在容器内的主机上挂载mongodb.conf。

更新,我对您的dockerfile进行了少许更改,它开始工作。 CMD ["mongod", "--smallfiles", "-f", "/etc/mongodb.conf"]

-f/etc/mongodb.conf应该用逗号分隔,即CMD的语法。

请尝试此操作,让我知道。

答案 1 :(得分:0)

对于正在寻找如何在2019年本地安装dockerized mongo的快速指南并最终遇到该问题中提到的问题(仅在1个小时前发生在我身上的问题)的任何人,我写了一份快速的“指南”: https://yosh.ke.mu/mongo_in_docker

希望这对某人有用...