我正在构建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容器时,它都不会将最终输出同步回我的本地目录。
我在做什么错了?
答案 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