当容器在任何主机上启动时,将文件从主机复制到容器

时间:2019-06-12 01:41:16

标签: docker dockerfile

我想在任何主机上运行容器时将文件从主机复制到Docker容器。

这是我的 Dockerfile

FROM tomcat:9
EXPOSE 8080
ADD ./target/app.war /tmp/myapp.war
RUN unzip /tmp/myapp.war -d /usr/local/tomcat/webapps/myapp
ENTRYPOINT ["cp", "-r", "/data/*", "/usr/local/tomcat/webapps/myapp/data"]

构建docker映像后 docker build -t myappimage .

我在运行它:

docker run --mount type=bind,source=d:/data,destination=/data --rm -it -p 8081:8080 myappimage

但这会引发错误cp: cannot stat '/data/*': No such file or directory

我不确定为什么挂载不起作用,当容器启动时,它应该将所有文件从主机目录 d:/ data 复制到Docker容器目录 / data

2 个答案:

答案 0 :(得分:0)

ENTRYPOINT中的此命令在Docker容器中运行。

您可以尝试:

FROM tomcat:9
EXPOSE 8080
ADD ./target/app.war /tmp/myapp.war
RUN unzip /tmp/myapp.war -d /usr/local/tomcat/webapps/myapp
COPY /data /usr/local/tomcat/webapps/myapp/data/

答案 1 :(得分:0)

我希望在复制之前映像中存在/usr/local/tomcat/webapps/myapp/data目录。该命令在我的计算机(Mac)上似乎正常运行。不知道是不是d:/导致了问题。

如果您位于-v目录中,也可以尝试使用带有z标志的d:选项(它为我解决了同样的问题)

docker run -v "$(pwd)"/data:/data:z --rm -it -p 8081:8080 myappimage

使用-v将为您创建一个端点。您可以阅读here