gpt4 book ai didi

docker - “env”参数不适用于容器

转载 作者:行者123 更新时间:2023-12-02 19:24:50 24 4
gpt4 key购买 nike

我只是在测试Docker,所以这可能是一个非常简单的问题,但我似乎无法找出为什么它没有达到我的期望。

我创建了一个非常简单的Dockerfile进行测试,只是为了构建一个简单的镜像来安装一些软件包,克隆git repo并建立其需求:

FROM ubuntu:18.04

ENV PYTHONEXEC=python3 \
PIPEXEC=pip \
VIRTUALENVEXEC=virtualenv \
GITREPO=https://github.com/test/test.git \
REPODIR=test

RUN apt-get update && apt-get install -y git \
python3 \
python3-dev \
python3-virtualenv \
python-virtualenv \
qt5-default \
libcurl4-openssl-dev \
libxml2 \
libxml2-dev \
libxslt1-dev \
libssl-dev \
virt-viewer

RUN mkdir -p /app

WORKDIR /app

RUN git clone $GITREPO $REPODIR \
&& $VIRTUALENVEXEC -p $PYTHONEXEC venv \
&& . venv/bin/activate \
&& cd $REPODIR \
&& $PIPEXEC install -r requirements.txt

CMD ["sleep", "1000000"]

然后,我使用以下命令构建图像:
docker build -t gitapp:latest .

到目前为止,该方法有效。但是,如果我在 -e命令上指定了 docker container run参数,则似乎没有在上一个 RUN命令中替换它。

因此,如果我运行 docker container run -d -e "REPODIR=blah" gitapp,我希望它将被克隆在 /app/blah中,但仍将其克隆在 /app/test目录中。

当我运行 docker container exec -it -e "REPODIR=blah" <container-id> env时,我得到:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=2f6ba38341d6
TERM=xterm
REPODIR=blah
PYTHONEXEC=python3
PIPEXEC=pip
VIRTUALENVEXEC=virtualenv
GITREPO=https://github.com/test/test.git
HOME=/root

因此,似乎变量确实传递给了容器。那么为什么不将其传递给最后的 RUN命令,以便将存储库克隆到正确的目录中呢?我在这里缺少基本的东西吗?

最佳答案

当执行docker run时,您将指示容器执行Dockerfile的CMDENTRYPOINT命令。入口点以上的Dockerfile命令已在构建期间执行,并且在运行时不再执行。

这正是将您的github存储库克隆到最初在Dockerfile而不是在run命令带有-e标志传递的目录中定义的目录的原因。

一种解决方法是更改​​图像的入口点。您可以转移这部分

RUN git clone $GITREPO $REPODIR \
&& $VIRTUALENVEXEC -p $PYTHONEXEC venv \
&& . venv/bin/activate \
&& cd $REPODIR \
&& $PIPEXEC install -r requirements.txt

到bash脚本(我们将其称为 my.script.sh)文件,该文件将作为图像的入口点执行。在构建过程中,将文件复制到首选位置,确保它包含可执行标志,并相应地编辑 Dockerfile的入口点:
CMD ["/path_to_script/myscript.sh" ]
但是,有一个警告:与当前设置相反,每次启动容器时都会执行该脚本,这可能会导致延迟,具体取决于 myscript.sh内容。

关于docker - “env”参数不适用于容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com