由于“在现有文件上安装卷”导致Docker构建失败

时间:2018-01-05 06:47:31

标签: docker docker-for-mac

由于以下错误,我遇到了构建失败的问题:

Step 12/13 : VOLUME /var/lib/postgresql/data cannot mount volume over existing file, file exists /var/lib/docker/aufs/mnt/a3d9ab74930d907691fb8870a29ea08b8fab0bd0fd7ecb1064982be512d904fa/var/lib/postgresql/data

我之前构建了图像,在本地运行它(没有安装卷),然后编辑了Dockerfile,并尝试再次构建它。我删除了所有已停止的容器,并删除了所有悬空卷。 docker volume ls显示没有卷,但我仍然收到此错误。此外,每次运行它时,mnt更改后的目录名称都会更改错误消息。

Dockerfile:

FROM multiarch/alpine:armhf-v3.7
ENV GOSU_DOWNLOAD_KEY="0x036A9C25BF357DD4"

ENV PGDATA /var/lib/postgresql/data

ADD pg_hba.conf /var/lib/postgresql/data
ADD postgresql.conf /var/lib/postgresql/data
ADD docker-entrypoint.sh /

RUN apk add --update --no-cache postgresql tzdata curl gnupg && \
    gpg-agent --daemon && \
    gpg --keyserver pgp.mit.edu --recv-keys $GOSU_DOWNLOAD_KEY && \
    echo "trusted-key $GOSU_DOWNLOAD_KEY" >> /root/.gnupg/gpg.conf && \
    curl -sSL https://github.com/tianon/gosu/releases/download/1.10/gosu-armhf > gosu && \
    curl -sSL https://github.com/tianon/gosu/releases/download/1.10/gosu-armhf.asc > gosu.asc && \
    gpg --verify gosu.asc && \
    rm gosu.asc && \
    mv gosu /usr/bin/gosu && \
    chmod +x /usr/bin/gosu && \
    apk del --purge curl gnupg && \
    rm -rf /root.gnupg

ENTRYPOINT /docker-entrypoint.sh
EXPOSE 5432

VOLUME /var/lib/postgresql/data

CMD "postgres"

为什么这些构建失败了?我使用docker for mac。

2 个答案:

答案 0 :(得分:2)

使用ADD postgresql.conf /var/lib/postgresql/data复制postgres配置,VOLUME /var/lib/postgresql/data的路径与您尝试使用HttpResponseMessage挂载的卷的路径相同,但不允许阻止意外行为。

答案 1 :(得分:0)

这不准确。

当涉及Dockerfile和ADD / COPY命令以及VOLUME时,它们的顺序无关紧要。

在dockerfile中,VOLUME命令可确保在运行容器的构建或以后的docker commit命令期间,生成的映像在指定路径中没有数据。实际上,每个正在运行的容器都为该路径创建了一个单独的卷。除ADD和COPY命令外。这些命令将始终在生成的docker映像中的指定路径中生成数据。

此错误可能是因为FROM泊坞窗映像已在同一路径中包含VOLUME声明。