如何在Docker容器内的Ubuntu上安装Homebrew

16
在尝试在Ubuntu 18.04上安装homebrew时,我需要安装
# Dockerfile
FROM ubuntu:18.04

RUN apt-get update && apt-get install build-essential curl file git -y
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

出现错误:

==> 运行以下命令将Ruby添加到您的PATH中:PATH=/root/.linuxbrew/Homebrew/Library/Homebrew/vendor/portable-ruby/current/bin:$PATH 不要以root身份运行此命令!


你想要这个有特别的原因吗?Ubuntu软件包仓库通常非常完整,你通常可以轻松地使用apt-get install安装应用程序所需的依赖项。一般情况下,你不需要额外的软件包管理器。 - David Maze
@DavidMaze的原因是Dockerfile更易于维护和阅读。我可以使用一行brew命令完成所需操作,而不是像“apt-get install”那样使用多个命令,例如“brew install composer”。 - Vadim
4个回答

18

你为什么不能使用官方镜像(docker pull linuxbrew/linuxbrew)呢?它是基于Ubuntu 16.04 / Xenial的。

如果你必须使用Bionic (18.04),正确安装homebrew的方法是按照官方Dockerfile的步骤进行。

但是为了使你的Dockerfile能够工作,你需要安装Ruby、创建一个非root用户并以该用户身份执行安装脚本。如下所示:

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install build-essential curl file git ruby-full locales --no-install-recommends -y && \
    rm -rf /var/lib/apt/lists/*

RUN localedef -i en_US -f UTF-8 en_US.UTF-8

RUN useradd -m -s /bin/bash linuxbrew && \
    echo 'linuxbrew ALL=(ALL) NOPASSWD:ALL' >>/etc/sudoers

USER linuxbrew
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

USER root
ENV PATH="/home/linuxbrew/.linuxbrew/bin:${PATH}"

PS:我已经添加了--no-install-recommends以忽略可选依赖项,并添加了rm -rf /var/lib/apt/lists/*以删除apt-get遗留文件,从而减小镜像大小。此外,添加了locales以安装UTF-8或者在运行命令时brew会发出警告。


3
URL稍有变化。 警告:Linuxbrew已合并到Homebrew。 请迁移到以下命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" - Sprite

7
新的正确方式是:
RUN apt-get update && \
    apt-get install -y -q --allow-unauthenticated \
    git \
    sudo
RUN useradd -m -s /bin/zsh linuxbrew && \
    usermod -aG sudo linuxbrew &&  \
    mkdir -p /home/linuxbrew/.linuxbrew && \
    chown -R linuxbrew: /home/linuxbrew/.linuxbrew
USER linuxbrew
RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

6
加布里埃尔的回答对我大部分有用,但缺少了一步。我需要将/home/linuxbrew/.linuxbrew文件夹的所有权 chown 给将运行Homebrew的用户:
RUN apt-get update && \
    apt-get install -y -q --allow-unauthenticated \
    git \
    sudo
RUN useradd -m -s /bin/zsh linuxbrew && \
    usermod -aG sudo linuxbrew &&  \
    mkdir -p /home/linuxbrew/.linuxbrew && \
    chown -R linuxbrew: /home/linuxbrew/.linuxbrew
USER linuxbrew
RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

USER root
RUN chown -R $CONTAINER_USER: /home/linuxbrew/.linuxbrew

1
你是否考虑将Gabriel的答案复制粘贴到你的答案中,这样就有了完整的指令列表?(只看到“新的正确方式”注释很容易错过chown命令...)谢谢。 - richb-hanover

0
上述答案在我的Ubuntu 22.04 Docker容器上没有起作用。
我不得不添加几个步骤。 以下是完整的代码:
RUN apt-get update && \
    apt-get install -y -q --allow-unauthenticated \
    git \
    sudo
RUN useradd -m -s /bin/zsh linuxbrew && \
    usermod -aG sudo linuxbrew &&  \
    mkdir -p /home/linuxbrew/.linuxbrew && \
    chown -R linuxbrew: /home/linuxbrew/.linuxbrew
USER linuxbrew
RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
USER root
RUN chown -R $CONTAINER_USER: /home/linuxbrew/.linuxbrew
ENV PATH="/home/linuxbrew/.linuxbrew/bin:${PATH}"
RUN git config --global --add safe.directory /home/linuxbrew/.linuxbrew/Homebrew
USER linuxbrew
RUN brew update
RUN brew doctor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接