Docker卷数据未持久保存在本地

时间:2019-08-20 07:01:08

标签: docker

我正在构建Dockerfile,并且容器中的文件未与本地存储同步。

Dockerfile:

FROM maven:3.6.1-jdk-8

ENV HOME=\wc_console

RUN mkdir $HOME

ADD . $HOME

WORKDIR $HOME

RUN mvn clean install -T 2C -DskipTests=true

RUN mvn dependency:go-offline -B --fail-never

CMD mvn clean install -T 2C -DskipTests=true

我的docker build命令:

docker build -f build_maven_docker . -t wc_console_build:1.0

我想使用bind-mount是因为容器运行后,我需要在本地目录中输出。

我的docker run命令:

docker run -v e:\svn\daffodil-dev-3.4.1\whitecoats-admin:\wc_console wc_console_build:1.0

运行docker时,我在本地计算机上的当前工作目录为:e:\svn\daffodil-dev-3.4.1\whitecoats-admin

我在Docker容器中的工作目录:wc_console

但是,每当我运行docker容器时,它都不会将最终输出同步回我的本地目录。

我在做什么错了?

用于文件夹可视化的图像。 enter image description here

2 个答案:

答案 0 :(得分:0)

使用\wc_console,而不是在Dockerfile的ENV HOME=\wc_console中使用/wc_console。 Linux使用正斜杠进行目录结构化。您的docker run命令也是如此。更改

docker run -v e:\svn\daffodil-dev-3.4.1\whitecoats-admin:\wc_console wc_console_build:1.0

docker run -v e:\svn\daffodil-dev-3.4.1\whitecoats-admin:/wc_console wc_console_build:1.0

答案 1 :(得分:-2)

装入卷时,实际上用主机上的任何内容替换/ wc_console的内容。

如果要获取由maven生成的工件,则需要在正在运行的容器上运行maven命令,而不是将其作为构建过程的一部分。

这样做时,您也不需要在构建时将源添加到映像中。

FROM maven:3.6.1-jdk-8

ENV HOME=/wc_console

WORKDIR $HOME

# Make this part of the ENTRYPOINT if you really need it
#RUN mvn dependency:go-offline -B --fail-never

ENTRYPOINT mvn clean install -T 2C -DskipTests=true

话虽如此,对于您所需要的,您甚至根本不需要Dockerfile:

docker run --rm -v e:\svn\daffodil-dev-3.4.1\whitecoats-admin:/wc_console --workdir /wc_console maven:3.6.1-jdk-8 mvn clean install -T 2C -DskipTests=true