我想在任何主机上运行容器时将文件从主机复制到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
答案 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