RUN adduser -D appUser
RUN mkdir /usr/share/app
RUN mkdir /logs
ADD Function/target/foo.jar /usr/share/app
WORKDIR /usr/share/app
RUN chown -R appUser /usr/share/app
RUN chown -R appUser /logs
USER appUser
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "foo.jar"]`
我有一个奇怪的问题,我似乎无法解决。
我的根文件夹包含两个目录(均带有子目录)“ Demo / Dockerfile ”和“ Function / target / foo.jar ”
我的Dockerfile中有一个复制命令,内容为
COPY Function/target/foo.bar /usr/share/app
但是当我从根文件夹运行docker build -f Demo/Dockerfile
时,出现错误
stat /var/lib/docker/tmp/docker-builder238823934/Function/target/foo.jar: no such file or directory
我发现这有点奇怪,因为当我编辑复制命令以读取COPY /target/foo.bar /usr/share/app
之后,我进入 Function 目录并运行
docker build -f ../Demo/Dockerfile
它构建成功,或者如果我编辑Dockerfile以读取COPY foo.bar /usr/share/app
,然后将其cd进入目标目录并运行docker build -f ../../Demo/Dockerfile
,这也可以工作。
有这种行为的解释吗?
这是我的 dockerignore 文件的外观
!**/Dockerfile
!DockerServiceDescription/**
!Function/target/*.war
!server.xml
!tomcat-users.xml
答案 0 :(得分:2)
Docker仅使用上下文目录和子级,出于安全原因,不允许使用外部任何文件。
您应使用'。'向docker显示上下文目录。大约:
cd myproject
docker build -f Demo/Dockerfile .