我有以下 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
如何運行此命令。我需要這個
uj5u.com熱心網友回復:
/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\")"
uj5u.com熱心網友回復:
我建議盡可能避免使用 bash 特定的語法。
在這種情況下,在bash特有glob模式!(.env)是指“除每個檔案.env所以你可以完成通過移動這個特定的任務。.env的出路,洗掉整個目錄,重新創建和移動.env回;所有,而不必擔心其外殼擴展物件設定。
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 ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382111.html
標籤:码头工人
