我有下面的Dockerfile
FROM python:3.9-slim-buster
## DO SOMETHING HERE
RUN /bin/bash -c shopt -s extglob && rm -rfv !(".env")我得到了
Step 42/49 : RUN /bin/bash -c shopt -s extglob && rm -rfv !(".env")
---> Running in 5b4ceacb1908
/bin/sh: 1: Syntax error: "(" unexpected运行此命令的HOw。我需要这个
发布于 2022-01-06 09:52:34
您的Dockerfile中的每个运行行都将启动一个带有单独shell的新容器。必须在shell解析输入行之前设置extglob shell选项,因此,启动该选项的方法之一是启用该选项:
RUN /bin/bash -O extglob -c 'rm -rfv !(".env")'主要的警告是,您必须将命令行引用为字符串。
发布于 2021-12-15 11:37:47
我建议尽可能避免使用bash特定的语法。
在这种情况下,bash特定的glob模式!(.env)意味着“除.env之外的每个文件,所以您可以通过移动.env来完成这个特定的任务,删除整个目录,重新创建它,并将.env移回;所有这些都不用担心设置了哪些shell扩展对象。”
RUN cd .. \
&& mv the_dir/.env . \
&& rm -rf the_dir \
&& mkdir the_dir \
&& mv .env the_dir您还可以考虑是否需要一个广泛的rm -rf。由于Docker的层系统,目录的前一个内容仍然是“在图像中”。如果您使用多级建造,那么后面的阶段将从一个干净的板子开始,您可以在任何需要的情况下使用COPY。
FROM python:3.9-slim-buster AS build
...
FROM python:3.9-slim-buster
WORKDIR /app
COPY .env .
COPY --from=build ...发布于 2021-12-15 10:35:55
/bin/bash似乎适用于"shopt -s extglob“部分,而不是另一部分。把这样的线条分开:
RUN /bin/bash -c shopt -s extglob
RUN /bin/bash -c rm -rfv !(".env")或
RUN /bin/bash -c "shopt -s extglob && rm -rfv !(\".env\")"https://stackoverflow.com/questions/70361248
复制相似问题