在我的 Dockerfiles 中,如果存在,我想将一个文件复制到我的图像中,pip 的 requirements.txt 文件似乎是一个不错的候选者,但是如何实现呢?
COPY (requirements.txt if test -e requirements.txt; fi) /destination ... RUN if test -e requirements.txt; then pip install -r requirements.txt; fi
或者
if test -e requirements.txt; then COPY requiements.txt /destination; fi RUN if test -e requirements.txt; then pip install -r requirements.txt; fi
目前不支持此功能(因为我怀疑它会导致无法复制的图像,因为相同的 Dockerfile 会复制或不复制该文件,具体取决于它的存在)。
在issue 13045中仍然要求使用通配符:“ COPY foo/* bar/" not work if no file in foo”(2015 年 5 月)。 它现在(2015 年 7 月)不会在 Docker 中实现,但是像 bocker 这样的另一个构建工具可以支持这一点。
COPY foo/* bar/" not work if no file in foo
2021 年:
COPY source/. /source/对我有用(即在是否为空时复制目录,如“无论是否为空,都将目录复制到 docker build - 失败” COPY failed: no source files were specified“ ”)
COPY source/. /source/
COPY failed: no source files were specified
2022
这是我的建议: # syntax=docker/dockerfile:1.2 RUN --mount=type=bind,source=jars,target=/build/jars \ find /build/jars -type f -name '*.jar' -maxdepth 1 -print0 \ | xargs -0 --no-run-if-empty --replace=source cp --force source ”${INSTALL_PATH}/modules/” 这可以解决: COPY jars/*.jar "${INSTALL_PATH}/modules/" 但是如果没有找到,则复制 no *.jar,而不会引发错误。
这是我的建议:
# syntax=docker/dockerfile:1.2 RUN --mount=type=bind,source=jars,target=/build/jars \ find /build/jars -type f -name '*.jar' -maxdepth 1 -print0 \ | xargs -0 --no-run-if-empty --replace=source cp --force source
”${INSTALL_PATH}/modules/”
这可以解决:
COPY jars/*.jar "${INSTALL_PATH}/modules/"
但是如果没有找到,则复制 no *.jar,而不会引发错误。
*.jar