dockerfile中无法执行source命令,并且执行后也不能持久化(传递到下一层)的问题怎么解决,我需要在docker容器中安装gvm,用特定的go版本编译一个程序,各种ai给的解决方案都试过了不好用,比如bash -c,SHELL,换成.啥的,source好像还不能在dash下使用,求助一下大佬怎么解决
dockerfile中无法执行source命令,并且执行后也不能持久化(传递到下一层)的问题怎么解决,我需要在docker容器中安装gvm,用特定的go版本编译一个程序,各种ai给的解决方案都试过了不好用,比如bash -c,SHELL,换成.啥的,source好像还不能在dash下使用,求助一下大佬怎么解决
https://github.com/matthieudolci/docker-gvm/blob/master/Dockerfile 看看别人咋做的
RUN bash -c “. /root/.gvm/scripts/gvm && gvm install go1.20.7 && gvm use go1.20.7 –default”
source 是 bash 的内置命令,但在很多场景可以直接用 . 替代
使用 RUN 和 && 链式命令
通过链式命令将 source 或其等效操作的效果传递到后续的命令中,而不是依赖持久化。
通义千问给我的就是这个,bass<<那行直接报错
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”
要么在同一层里面操作 要么用 (https://docs.docker.com/reference/dockerfile/#env) 或者 (https://docs.docker.com/reference/dockerfile/#arg)
ai给的答案?
对
大概所有的ai我都试了,都是错的,现在ai已经向csdn靠拢了,一个人错,全体都错
ai的错误答案就不必发了
查了一下gvm不适合跑在容器里
我觉得也是,分阶段构建就能规避go版本问题,但我不敢确认这个结论,有没有比较权威的人也这么说?
容器追求简化和高效,而 GVM 增加了复杂性 容器中的 Go 版本通常是固定的,不需要频繁切换
在开发阶段使用 GVM,但在容器中仅使用最终的编译产物
有种复杂的实现方式就是写operator 来动态调整pod
谢谢,我已经通过多阶段构建交差了