質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Yarn

Yarnは、Facebook/Exponent/Google/Tildeが開発したJavaScriptのパッケージマネージャ。npmよりもインストールが速く、厳密にモジュールのバージョンを固定できるなど、npmの問題を解決。npmと互換性があり、同じpackage.jsonを使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2588閲覧

Dockerfileで、シェルの再起動 exec $SHELL -l を実行する方法

uyugineer

総合スコア13

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Yarn

Yarnは、Facebook/Exponent/Google/Tildeが開発したJavaScriptのパッケージマネージャ。npmよりもインストールが速く、厳密にモジュールのバージョンを固定できるなど、npmの問題を解決。npmと互換性があり、同じpackage.jsonを使用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/07/03 09:23

前提・実現したいこと

anyenvをインストールしたコンテナを作成するDockerfileを書いています。
RUN exec $SHELL -l
とするとエラーが発生しました。
これが通らないと、以降anyenvコマンドが実行できないため困っています。
調べても有益な情報が見つけることができませんでした。
anyenvが実行できるようになるのであれば、方法は問わないです。
わかる方がいらっしゃれば、ご教示頂きたいです。

anyenvのインストール手順は、以下のサイトを参考にし、手動では最後まで成功しています
https://qiita.com/282Haniwa/items/71a48a10952413416d18

発生している問題・エラーメッセージ

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

該当のソースコード

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 ENV PATH $HOME/.anyenv/bin:$PATH # RUN echo 'eval "$(anyenv init -)"' >> ~/.bash_profile RUN exec $SHELL -l RUN anyenv install --init # RUN exec $SHELL -l # RUN anyenv install nodenv # RUN exec $SHELL -l # WORKDIR /opt

試したこと

ENVでPATHを設定するところまでのImageを作成し、ビルドしてみました。
コンテナに入り以下手動で実行しました。
コンテナに入った直後、
echo $PATH
を実行すると、ENVで追加した環境変数は表示されませんでした。
その後、
exec $SHELL -l
を実行し、そのうえでもう一度
echo $PATH
を実行するとENVで追加した環境変数が表示されました。

なので
exec $SHELL -l
までの手順は成功しているようです

補足情報(FW/ツールのバージョンなど)

Docker version 20.10.7
他に必要な情報があれば教えていただければ調べて載せます

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

anyenvなどのバージョン管理ツールをコンテナで使うよりは、ベースイメージから取得するほうが一般的かつコンテナのメリットを活かす形になると思うのですが、anyenvを採用したい理由はありますか?

投稿2021/07/05 04:59

inductor

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uyugineer

2021/07/06 04:22

コメントありがとうございます! anyenvを採用した理由は、参考書の手順に従ったためです。(参考書はコンテナではなくホストに環境構築をしており、私が勝手にコンテナで再現しようとしていました) でも今回はnodejsを入れたいだけのコンテナなので、言われてみるとご指摘の通り、バージョン管理ツールをコンテナで使う意味がないですね。 質問内容について自力で調べていた時に、nodejsのベースイメージ?を使っているDockerfileを見かけたので、改めて調べて私もそのように書くようにしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問