首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过dockerfile升级bash?

如何通过dockerfile升级bash?
EN

Stack Overflow用户
提问于 2021-05-26 12:49:56
回答 1查看 63关注 0票数 1

我有一个bash 4.2的基础镜像,我想把它升级到5.1

我尝试将其解压缩,然后将path变量设置为该文件夹:

代码语言:javascript
复制
RUN curl -o /tmp/bash-5.1.tar.gz ${BASH_URL}/bash/5.1/bash-5.1.tar.gz \
  && tar -xvf /tmp/bash-5.1.tar.gz -C /usr/local/bin \
  && rm /tmp/bash-5.1.tar.gz
ENV PATH=/usr/local/bin/bash-5.1:$PATH

但是,当我构建镜像时,它的所有容器仍然运行bash4.2。我在.tar.gz包中也找不到像grep这样的命令,尽管它不在官方网站上,所以我甚至不能真正确定我应该在哪里设置PATH。这是tarball的第一层

代码语言:javascript
复制
ABOUT-NLS    bashline.c    conftypes.h    findcmd.c  lib           parse.y         shell.c      unwind_prot.c
aclocal.m4   bashline.h    copy_cmd.c     findcmd.h  list.c        patchlevel.h    shell.h      unwind_prot.h
alias.c      bashtypes.h   COPYING        flags.c    locale.c      pathexp.c       sig.c        variables.c
alias.h      bracecomp.c   cross-build    flags.h    m4            pathexp.h       sig.h        variables.h
array.c      braces.c      CWRU           general.c  mailcheck.c   pathnames.h.in  siglist.c    version.c
arrayfunc.c  builtins      dispose_cmd.c  general.h  mailcheck.h   pcomplete.c     siglist.h    xmalloc.c
arrayfunc.h  builtins.h    dispose_cmd.h  hashcmd.c  make_cmd.c    pcomplete.h     stringlib.c  xmalloc.h
array.h      ChangeLog     doc            hashcmd.h  make_cmd.h    pcomplib.c      subst.c      Y2K
assoc.c      CHANGES       error.c        hashlib.c  Makefile.in   po              subst.h      y.tab.c
assoc.h      command.h     error.h        hashlib.h  MANIFEST      POSIX           support      y.tab.h
AUTHORS      COMPAT        eval.c         include    mksyntax.c    print_cmd.c     syntax.h
bashansi.h   config-bot.h  examples       input.c    NEWS          quit.h          test.c
bashhist.c   config.h.in   execute_cmd.c  input.h    nojobs.c      RBASH           test.h
bashhist.h   config-top.h  execute_cmd.h  INSTALL    NOTES         README          tests
bashintl.h   configure     expr.c         jobs.c     parser-built  redir.c         trap.c
bashjmp.h    configure.ac  externs.h      jobs.h     parser.h      redir.h         trap.h

我本以为会看到像grepechochmod之类的东西。

我的目标只是能够构建一个dockerfile并让它运行bash5.1。除了这一节之外,文件中的其他所有内容都可以正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 13:19:46

您安装的bash根本不包含bash二进制文件;它包含需要在使用新tarball之前编译和安装的C源代码。

此外,如果二进制文件名为bash,并且您将其安装在/usr/local/bin/bash中,则您的PATH应该包含/usr/local/bin,而不是各个二进制文件的实际名称。(参见Should PATH contain directories or full paths to binaries?) ...但很有可能它已经这样做了。

所以,简而言之,

代码语言:javascript
复制
RUN curl -o /tmp/bash-5.1.tar.gz ${BASH_URL}/bash/5.1/bash-5.1.tar.gz \
  && tar -xvf /tmp/bash-5.1.tar.gz -C /tmp \
  && cd /tmp/bash-5.1 \
  && ./configure --prefix=/usr/local \
  && make \
  && make install
# Probably not actually necessary
ENV PATH=/usr/local/bin:$PATH

但是,阅读tarball中的INSTALL文件,可能会研究一下您的发行版的Bash到底是如何构建的,这样您就可以提供相同的配置参数,等等。

在某种程度上,什么才能工作还取决于您的目标平台。

安装的二进制文件名为bash,而不是grep。如果你想安装一个新版本的grep,那是一个单独的包(如果你在Linux上,就是GNU)。外部命令chmod也是如此。echo是shell中的一个内置命令,因此它不会被编译成单独的二进制文件。

对于许多Linux发行版来说,安装更新的Bash的最简单的方法就是找到一个二进制存储库,其中包含一个可安装的、打包的更新版本,您可以直接使用apt install或类似的方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67698691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档