簡體   English   中英

如何在 Ubuntu Docker 容器中安裝 ruby 3.1.2?

[英]How to install ruby 3.1.2 in an Ubuntu Docker container?

我試過:

if ! command -v ruby &> /dev/null
then
    # - proverbot's version
    # First, install Ruby, as that is for some reason required to build
    # the "system" project
#    git clone https://github.com/rbenv/ruby-build.git ~/ruby-build
#    mkdir -p ~/.local
#    PREFIX=~/.local ./ruby-build/install.sh
#    ~/.local/ruby-build 3.1.2 ~/.local/

    # - u-pycoq's version
#    sudo apt-get install ruby-full
    sudo apt-get install rbenv
    rbenv init
    eval "$(rbenv init - bash)"
    echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc

    sudo apt-get install ruby-build
#    ruby-build 3.1.2
    rbenv install 3.1.2

    rbenv global 3.1.2
    ruby -v

else
    echo "Error: failed to install ruby"
fi

但是我得到我的 Ruby 構建可能不是最新的,但是當我安裝它時,它是最新的。 因此,如果proverbot的嘗試不存在,為什么是3.1.2呢?

它的靈感來自: https ://superuser.com/questions/340490/how-to-install-and-use-different-versions-of-ruby


它似乎適用於 2.7.1,但不適用於 3.1.2。

    sudo apt-get install rbenv
    rbenv init
    eval "$(rbenv init - bash)"
    echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc

    sudo apt-get install ruby-build
#    mkdir -p ~/.local
#    PREFIX=~/.local
#    sh ~/ruby-build/install.sh

    mkdir -p ~/.local
    ruby-build 2.7.1 ~/.local
    rbenv global 2.7.1
#    ruby-build 2.3.1p112 ~/.local/
#    ruby-build 3.1.2 ~/.local/
#    rbenv global 3.1.2

    ruby -v
bot@513314bdda2a:~/ruby-build$ ruby -v

ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]

失敗的主要命令

我認為這是安裝 rbenv 和 ruby-build 后失敗的主要命令:

rbenv install 3.1.2

ruby-build: definition not found: 3.1.2

See all available versions with `rbenv install --list.

If the version you need is missing, try upgrading ruby-build.

我的 Ubuntu 版本可能是問題所在嗎?

我在我的 Docker 容器外的另一個服務器上嘗試了它,Ruby 可以工作。 在 Docker 容器中,它說它是:

bot@513314bdda2a:~/ruby-build$ lsb_release -a

No LSB modules are available.
Distributor ID:    Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:    11
Codename:    bullseye

這是一個問題嗎?


我嘗試更新 ruby-build

我跑了sudo apt-get update然后sudo apt-get upgrade ruby-build -build 然后mkdir -p ~/.local然后ruby-build 3.1.2 ~/.local/錯誤是ruby-build: definition not found: 3.1.2


我嘗試了一堆 Ubuntu,但都失敗了

#!/usr/bin/env bash

# - Get the Ubuntu version for the Ubuntu image
#docker run -it --rm ubuntu:20.04 /bin/bash
docker run -it --rm ubuntu:18.04 /bin/bash
apt-get update && apt-get install -y lsb-release && apt-get clean all
lsb_release -a
#apt-get install git

apt-get update
apt-get upgrade ruby-build

apt-get install rbenv
apt-get install ruby-build
rbenv install 3.1.2

# - Get Ubuntu version for the 'miniconda3' Docker image
docker run -it --rm continuumio/miniconda3:latest /bin/bash
#sudo apt-get install lsb-release
#apt-get install lsb-release
apt-get update && apt-get install -y lsb-release && apt-get clean all
lsb_release -a

ruby-build 的輸出https://gist.github.com/brando90/8a40e83df107f5a915ba105d9fb0121c

$ ruby-build --definitions

1.8.5-p52
1.8.5-p113
...

要點是所有 3.xx 都丟失了。


我嘗試手動更新 ruby-build,但失敗了

我確實做了:

git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

然后

git -C "$(rbenv root)"/plugins/ruby-build pull

然后我用 rbenv 安裝了 3.1.2。 它似乎成功了,但是ruby --version似乎不正確(?)。

bot@e3a50e4f740f:~$ rbenv install 3.1.2
To follow progress, use 'tail -f /tmp/ruby-build.20221207002433.1304.log' or pass --verbose
Downloading ruby-3.1.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
Installing ruby-3.1.2...

Installed ruby-3.1.2 to /home/bot/.rbenv/versions/3.1.2


bot@e3a50e4f740f:~$ ruby --version

ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]

bot@e3a50e4f740f:~$ rbenv global 3.1.2

bot@e3a50e4f740f:~$ ruby --version

ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]

選項:rbenv 官方說明

唉,沒用:皺眉:

$ rbenv install 3.1.2

rbenv: no such command `install'

我做了:

mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc

bash
# exec $SHELL

rbenv install 3.1.2

使用官方說明: Seamlessly manage your app's Ruby environment with rbenv, Basic Git Checkout


最好使用 Ruby Docker 容器嗎? 但是如何獲得我想要的特定版本 3.1.2(或任何特定版本)?

我嘗試在具有特定版本 3.1.2 的 Docker 容器上安裝 ruby 的所有選項,可能最好只使用 Ruby 映像,對 3.1.2 有什么建議嗎?


賞金的想法:強制將 FROM ruby:3.1.2 圖像插入正在運行的容器中

我仍然無法在已經運行的容器上安裝 Ruby :(, 是否可以在正在運行的圖像之上將 ruby 3.1.2 圖像分層到正在運行的容器中?


參考:

這不適用於問題標題的 Ubuntu Docker 容器,但它至少適用於我使用的 Ubuntu 的HPC ,因此它對未來的讀者仍然有用,這是 Ubuntu Docker 容器的真正答案仍然需要和想要。

# - install rbenv for installing the Ruby interpreter

mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git .

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc.user
echo 'eval "$(rbenv init -)"' >> ~/.bashrc.user
exec $SHELL
bash
source ~/.bashrc.user

rbenv -v

# - install ruby-build
mkdir ~/.ruby-build
cd ~/.ruby-build
git clone https://github.com/rbenv/ruby-build.git .

export PATH="$HOME/.ruby-build/bin:$PATH"
echo 'export PATH="$HOME/.ruby-build/bin:$PATH"' >> ~/.bashrc.user
exec $SHELL
bash
source ~/.bashrc.user

ruby-build --version

# - install ruby without sudo -- now that ruby build was install
mkdir -p ~/.local
#    ruby-build 3.1.2 ~/.local/
rbenv install 3.1.2
rbenv global 3.1.2

ruby -v
which ruby

鑒於我迄今為止付出的巨大努力,我認為最好的辦法就是從頭開始重建 Docker 鏡像,從您需要的所有 Docker 鏡像開始。 對我來說,我需要從這些開始:

FROM continuumio/miniconda3
# FROM --platform=linux/amd64 continuumio/miniconda3
#FROM ubuntu:20.04
#FROM ubuntu:18.04
FROM ruby:3.1.2

但是重建圖像,我測試了在啟動 Ruby 3.1.2 容器后是否可以使用正確的 Ruby 圖像(如果你想要一個不同的圖像,我假設去 Docker 網站尋找 Ruby works 或嘗試不同的版本標簽或者做最新的)。 輸出:

(meta_learning) brandomiranda~ ❯ docker run -it --rm ruby:3.1.2 bash

Unable to find image 'ruby:3.1.2' locally
3.1.2: Pulling from library/ruby
077c13527d40: Pull complete
a3e29af4daf3: Pull complete
3d7b1480fa4d: Pull complete
426e8acfed2a: Pull complete
7301bf329e1e: Pull complete
1e6ce022773b: Pull complete
08fd3b7f7d99: Pull complete
2a797222ff77: Pull complete
Digest: sha256:7681a3d37560dbe8ff7d0a38f3ce35971595426f0fe2f5709352d7f7a5679255
Status: Downloaded newer image for ruby:3.1.2
root@70d03f6408cd:/# ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [aarch64-linux]

您可以使用rvm而不是rbenv

網站: https ://rvm.io。 它適用於碼頭工人。

這是 ubuntu docker 鏡像的命令

curl -sSL https://get.rvm.io | bash -s stable

rvm install 3.1.2

ruby -v // 3.1.2 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM