【发布时间】:2018-07-25 11:45:36
【问题描述】:
我有一个Dockerfile,目前使用以下内容:
COPY ./compose/local/django/start.sh /start.sh
RUN sed -i 's/\r//' /start.sh
RUN chmod +x /start.sh
如您所见,它会复制文件,然后使其可执行。我现在需要根据构建映像时提供的参数来更改它。我试过用这个:
RUN if [ "$arg" = "True" ]; then \
COPY ./compose/local/django/new.sh /new.sh \
RUN sed -i 's/\r//' /new.sh \
RUN chmod +x /new.sh; else \
COPY ./compose/local/django/start.sh /start.sh \
RUN sed -i 's/\r//' /start.sh \
RUN chmod +x /start.sh; fi
但这失败了,因为我似乎无法在条件语句中运行COPY 或RUN 命令。它总是失败:
/bin/sh: 1: COPY: not found
或
/bin/sh: 1: RUN: not found
所以,我认为最好的做法是创建一个单独的 bash 文件来执行副本,例如:
#!/usr/bin/env bash
if [ "${arg}" = "True" ]; then
echo "arg = ${arg}"
cp ./compose/local/django/new.sh /new.sh
elif [ "${arg}" = "False" ]; then
echo "arg = ${arg}"
cp ./compose/local/django/start.sh /start.sh
fi
但我正在努力解决如何使复制的 bash 文件可执行。我知道我可以通过在命令行中运行 chmod +x 来做到这一点,但由于我不是唯一要构建它的人,我希望会有更好的解决方案,就像我之前在原始的Dockerfile 脚本。
谁能帮我解决这个问题?任何帮助将不胜感激。
【问题讨论】:
-
这里有类似的问题,有很多解决方案 - stackoverflow.com/questions/43654656/… 让我知道是否对您有用?
-
@RohanJMohite 我的问题的第二部分基于该答案(即创建一个单独的 bash 文件)。我只是不想必须使用命令行来使其可执行,因为会有多个人使用它,所以如果他们想使用它时必须自己执行它会有点费力。跨度>
-
如果您查看第一个答案stackoverflow.com/questions/43654656/…,我想这就是您要找的。span>
标签: docker