【问题标题】:Installing brew package during Docker build not working在 Docker 构建期间安装 brew 包不起作用
【发布时间】:2021-02-04 06:06:53
【问题描述】:

我正在尝试在 docker 构建期间安装 arduino-cli(一个自制软件包),使用以下 dockerfile。

docker 映像似乎构建正确,但在我的 Web 服务器上运行时,我的日志中出现以下输出。

请注意,这个问题似乎与Installing homebrew packages during Docker build 类似,但接受的答案似乎对我没有帮助。

这似乎表明 arduino-cli 没有正确安装,或者只是路径没有正确链接?

FileNotFoundError: [Errno 2] No such file or directory: 'arduino-cli': 'arduino-cli'
FROM python:3.6

RUN apt-get update && apt-get install -y git curl binutils clang make
RUN git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew \
&& mkdir ~/.linuxbrew/bin \
&& ln -s ../Homebrew/bin/brew ~/.linuxbrew/bin \
&& eval $(~/.linuxbrew/bin/brew shellenv) \
&& brew --version \
&& brew install arduino-cli \
&& arduino-cli version
ENV PATH=~/.linuxbrew/bin:~/.linuxbrew/sbin:$PATH

RUN mkdir -p /opt/services/djangoapp/src
WORKDIR /opt/services/djangoapp/src

RUN pip install gunicorn django psycopg2-binary whitenoise

COPY . /opt/services/djangoapp/src

EXPOSE 8000

COPY init.sh /usr/local/bin/
    
RUN chmod u+x /usr/local/bin/init.sh
ENTRYPOINT ["init.sh"]

【问题讨论】:

    标签: docker dockerfile homebrew


    【解决方案1】:

    这很可能是 $PATH 问题。上述答案对您不起作用的原因是您在 $PATH 尚未更改时尝试使用arduino-cli。这应该使它工作:

    RUN git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew \
    && mkdir ~/.linuxbrew/bin \
    && ln -s ../Homebrew/bin/brew ~/.linuxbrew/bin \
    && eval $(~/.linuxbrew/bin/brew shellenv) \
    && brew --version \
    && brew install arduino-cli
    
    # first change PATH
    ENV PATH=~/.linuxbrew/bin:~/.linuxbrew/sbin:$PATH
    
    # then run
    RUN arduino-cli version
    
    # not vice-versa
    

    【讨论】:

      【解决方案2】:

      这可能听起来很疯狂,但我可以建议为此使用 [multi stage dockerfile][1]。这将消除容器上的杂物并减少安全访问点。

      FROM homebrew/brew:latest AS brew
      RUN brew update
      RUN brew install arduino-cli
      
      # RUN brew list ardunio-cli
      FROM python:3.6
      COPY --from=brew /usr/local/Cellar /user/local
      
      ENV PATH=~/.linuxbrew/bin:~/.linuxbrew/sbin:$PATH
      
      RUN mkdir -p /opt/services/djangoapp/src
      WORKDIR /opt/services/djangoapp/src
      
      RUN pip install gunicorn django psycopg2-binary whitenoise
      
      COPY . /opt/services/djangoapp/src
      
      EXPOSE 8000
      
      COPY init.sh /usr/local/bin/
          
      RUN chmod u+x /usr/local/bin/init.sh
      ENTRYPOINT ["init.sh"]
      

      为了让 brew 文件正常工作,可能需要制作一些额外的符号 ling,但您的最终容器会更加纤薄且使用安全。

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 2021-07-24
        • 2022-12-14
        相关资源
        最近更新 更多