dockerfile中无法执行source命令,并且执行后也不能持久化(传递到下一层)的问题怎么解决,我需要在docker容器中安装gvm,用特定的go版本编译一个程序,各种ai给的解决方案都试过了不好用,比如bash -c,SHELL,换成.啥的,source好像还不能在dash下使用,求助一下大佬怎么解决

17人评论了“dockerfile中无法执行source命令,并且执行后也不能持久化(传递到下一层)的问题怎么解决”

  1. 使用 RUN 和 && 链式命令

    通过链式命令将 source 或其等效操作的效果传递到后续的命令中,而不是依赖持久化。

  2. FROM ubuntu:20.04

    # 安装必要依赖
    RUN apt-get update && apt-get install -y \
    curl git gcc make bash \
    && rm -rf /var/lib/apt/lists/*

    # 下载并安装 gvm
    RUN bash -c “curl -s -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash”

    # 设置环境变量
    ENV GVM_ROOT=/root/.gvm
    ENV PATH=$GVM_ROOT/bin:$PATH
    RUN bash -c “source $GVM_ROOT/scripts/gvm && gvm install go1.20.7 && gvm use go1.20.7 –default”

    # 编译程序
    WORKDIR /app
    COPY . .
    RUN bash -c “source $GVM_ROOT/scripts/gvm && go build -o my_app”

  3. 我觉得也是,分阶段构建就能规避go版本问题,但我不敢确认这个结论,有没有比较权威的人也这么说?

  4. 容器追求简化和高效,而 GVM 增加了复杂性 容器中的 Go 版本通常是固定的,不需要频繁切换

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部