

anyenvをインストールしたコンテナを作成するDockerfileを書いています。

[code]

    FROM ubuntu:latest
    RUN apt update
    RUN apt -y upgrade
    RUN apt install -y sudo git
    RUN git clone https://github.com/anyenv/anyenv ~/.anyenv
    RUN echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
    RUN echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
    RUN exec $SHELL -l
    RUN anyenv install  --init
    
[/code]

上記を実行するとエラーが発生しました。

[code]

    => [internal] load build definition from Dockerfile                                                                                                                        0.1s 
    => => transferring dockerfile: 541B                                                                                                                                        0.0s 
    => [internal] load .dockerignore                                                                                                                                           0.0s 
    => => transferring context: 2B                                                                                                                                             0.0s 
    => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                            0.0s 
    => [1/9] FROM docker.io/library/ubuntu:latest                                                                                                                              0.0s 
    => CACHED [2/9] RUN apt update                                                                                                                                             0.0s 
    => CACHED [3/9] RUN apt -y upgrade                                                                                                                                         0.0s 
    => CACHED [4/9] RUN apt install -y sudo git                                                                                                                                0.0s 
    => CACHED [5/9] RUN git clone https://github.com/anyenv/anyenv ~/.anyenv                                                                                                   0.0s 
    => CACHED [6/9] RUN echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile                                                                                        0.0s 
    => CACHED [7/9] RUN echo 'eval "$(anyenv init -)"' >> ~/.bash_profile                                                                                                      0.0s 
    => ERROR [8/9] RUN exec $SHELL -l 
    ------
     > [8/9] RUN exec $SHELL -l:
    #11 0.414 /bin/sh: 1: exec: -l: not found
    ------
    executor failed running [/bin/sh -c exec $SHELL -l]: exit code: 127
    
[/code]

エラーメッセージは exec,-l がないと言っているようですが、どうすればいいの？という状態です。

anyenvのインストール手順は以下のサイトを参考にしています

[anyenvの環境構築 - Qiita](https://qiita.com/282Haniwa/items/71a48a10952413416d18)

**環境**

Docker version 20.10.7

### 試したこと

**1.エラー直前までのImageを作成し、以降起動したコンテナ内で手動でコマンドを実行する**  
下記でビルドするとビルド成功

[code]

    FROM ubuntu:latest
    RUN apt update
    RUN apt -y upgrade
    RUN apt install -y sudo git
    RUN git clone https://github.com/anyenv/anyenv ~/.anyenv
    RUN echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
    RUN echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
    
[/code]

パスを確認するとない

[code]

    root@6543e84c449a:/# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
[/code]

シェルを再起動

[code]

    root@6543e84c449a:/# exec $SHELL -l
    ANYENV_DEFINITION_ROOT(/root/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
    > anyenv install --init
    
[/code]

もう一度パスを確認すると設定できている

[code]

    root@6543e84c449a:/# echo $PATH
    /root/.anyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
[/code]

anyenvのインストール完了

[code]

    root@6543e84c449a:/# anyenv install --init
    Manifest directory doesn't exist: /root/.config/anyenv/anyenv-install
    Do you want to checkout https://github.com/anyenv/anyenv-install.git? [y/N]: y
    Cloning https://github.com/anyenv/anyenv-install.git master to /root/.config/anyenv/anyenv-install...
    Cloning into '/root/.config/anyenv/anyenv-install'...
    remote: Enumerating objects: 62, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (5/5), done.
    remote: Total 62 (delta 1), reused 1 (delta 0), pack-reused 57
    Unpacking objects: 100% (62/62), 10.50 KiB | 155.00 KiB/s, done.
    
    Completed!
    
[/code]

**2.anyenvのフルパスを指定してコマンドを実行する**  
下記でビルドするとビルド成功

[code]

    FROM ubuntu:latest
    RUN apt update
    RUN apt -y upgrade
    RUN apt install -y sudo git
    RUN git clone https://github.com/anyenv/anyenv ~/.anyenv
    RUN echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
    RUN echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
    RUN ~/.anyenv/bin/anyenv install --force-init
    
[/code]

ただし、この方法だと、以降anyenvコマンドすべてフルパスを記述することになります。  
これは、Dockerfileとしては不適切な気がします。

**3.ENVでパスを設定する**  
下記でビルドするとビルドエラー

[code]

    FROM ubuntu:latest
    RUN apt update
    RUN apt -y upgrade
    RUN apt install -y sudo git
    RUN git clone https://github.com/anyenv/anyenv ~/.anyenv
    ENV PATH $HOME/.anyenv/bin:$PATH
    RUN anyenv install --init
    
[/code]

パスが反映されてないためanyenvが見つからないとなりました

[code]

    => [internal] load build definition from Dockerfile                                                                                                                        0.1s 
     => => transferring dockerfile: 545B                                                                                                                                        0.0s 
     => [internal] load .dockerignore                                                                                                                                           0.1s 
     => => transferring context: 2B                                                                                                                                             0.0s 
     => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                            0.0s 
     => [1/6] FROM docker.io/library/ubuntu:latest                                                                                                                              0.0s 
     => CACHED [2/6] RUN apt update                                                                                                                                             0.0s 
     => CACHED [3/6] RUN apt -y upgrade                                                                                                                                         0.0s 
     => CACHED [4/6] RUN apt install -y sudo git                                                                                                                                0.0s 
     => CACHED [5/6] RUN git clone https://github.com/anyenv/anyenv ~/.anyenv                                                                                                   0.0s 
     => ERROR [6/6] RUN anyenv install  --init                                                                                                                                  0.5s 
    ------
     > [6/6] RUN anyenv install  --init:
    #9 0.425 /bin/sh: 1: anyenv: not found
    ------
    executor failed running [/bin/sh -c anyenv install  --init]: exit code: 127
    
[/code]

[code]

    exec $SHELL -l
    
[/code]

このコマンドさえエラーにならなければ、問題ないと思いますが、  
調べても有益な情報が見つけることができませんでした。  
わかる方がいらっしゃれば、ご教示頂きたいです。  
よろしくお願いいたします。


CC BY-SA 4.0
2021-07-04T01:54:53.320
77946
2021-07-04T02:44:40.693
2021-07-04T02:44:40.693
3060
47142
question
docker nodenv
Dockerfileでanyenvのインストールを記述したがパスが反映されない