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

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

新規登録して質問してみよう
ただいま回答率
87.20%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

dockerイメージでpyenvをインストールしたい

yuta1989
jetstream

総合スコア40

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0回答

0評価

0クリップ

213閲覧

投稿2022/06/22 07:29

編集2022/06/28 11:44

$ packer build container.json を実行して、amazonlinuxのdockerイメージを作成しています。

↑を実行した後に、aws/pip/pyenv のコマンドが含まれるスクリプトを実行すると、

aws: command not found

というエラーが出ます。(container.jsonの中でpip install awscliしています)

一時的な対処として、ターミナル上から$ yum install awscliを実行して↑のエラーは解消されても今度は

pyenv: command not found pip: command not found

というエラーが出ます。

おそらく、container.jsonの

git clone https://github.com/yyuu/pyenv.git {{user `pyenv_dir`}}

でpyenvのインストールができていないのかなと思っています。
(Pythonのバージョンもcontainer.jsonで3.6を指定してインストールしていますが、python --versionでpython 2.7が出力されました。 )

いろいろ調べましたがpyenvがインストールできないので、教えていただけると嬉しいです。。

補足:5年ほど前は問題ありませんでしたが、今動かしてみるとエラーが出てしまいます(container.jsonのコードは一部自分で調べて修正しています)。

↓container.json

JSON

{ "variables": { "pyenv_dir": "/root/.pyenv", "pyenv_bin": "/root/.pyenv/bin/pyenv", "work_dir": "/opt/test1/test2" }, "builders": [ { "type": "docker", "image": "amazonlinux:latest", "commit": "true" } ], "provisioners": [ { "type": "shell", "inline": [ "mkdir -p {{user `work_dir`}}" ] }, { "type": "file", "source": "../", "destination": "{{user `work_dir`}}" }, { "type": "shell", "inline": [ "yum -y update", "yum -y groupinstall 'Development Tools'", "yum -y install openssl openssl-devel sqlite sqlite-devel wget git gcc zlib-devel", "yum install -y bzip2-libs.x86_64 bzip2 bzip2-devel.x86_64", "yum install -y readline readline-devel.x86_64", "yum install ncurses-devel ncurses-libs ncurses", "yum install -y lzma xz-devel", "git clone https://github.com/yyuu/pyenv.git {{user `pyenv_dir`}}", "echo 'export PYENV_ROOT=\"{{user `pyenv_dir`}}\"' >> ~/.bashrc", "echo 'if [ -d \"{{user `pyenv_dir`}}\" ]; then' >> ~/.bashrc", "echo 'export PATH={{user `pyenv_dir`}}/bin:$PATH' >> ~/.bashrc", "echo 'eval \"$(pyenv init -)\"' >> ~/.bashrc", "echo 'fi' >> ~/.bashrc", "echo {{user `pyenv_dir`}}", "export PATH={{user `pyenv_dir`}}/bin:$PATH", "source ~/.bashrc", "{{user `pyenv_bin`}} init -", "{{user `pyenv_bin`}} install 3.6.1", "{{user `pyenv_bin`}} global 3.6.1", "{{user `pyenv_bin`}} rehash", "{{user `pyenv_dir`}}/shims/pip install --upgrade pip", "{{user `pyenv_dir`}}/shims/pip install awscli", "{{user `pyenv_dir`}}/shims/pip install virtualenv", "{{user `pyenv_dir`}}/shims/pip install -r {{user `work_dir`}}/src/requirements.txt" ] } ], "post-processors": [ [ { "type": "docker-tag", "repository": "test1/test2", "tag": "latest" } ] ] }

↓$ packer buildを実行した時の出力内容(長いので一部省略しています)。

==> docker: Cloning into '/root/.pyenv'... docker: /root/.pyenv docker: PATH="$(bash --norc -ec 'IFS=:; paths=($PATH); for i in ${!paths[@]}; do if [[ ${paths[i]} == "'/root/.pyenv/shims'" ]]; then unset '\''paths[i]'\''; fi; done; echo "${paths[*]}"')" docker: export PATH="/root/.pyenv/shims:${PATH}" docker: export PYENV_SHELL=bash docker: source '/root/.pyenv/libexec/../completions/pyenv.bash' docker: command pyenv rehash 2>/dev/null docker: pyenv() { docker: local command docker: command="${1:-}" docker: if [ "$#" -gt 0 ]; then docker: shift docker: fi docker: docker: case "$command" in docker: rehash|shell) docker: eval "$(pyenv "sh-$command" "$@")" docker: ;; docker: *) docker: command pyenv "$command" "$@" docker: ;; docker: esac docker: } ==> docker: Downloading Python-3.6.1.tar.xz... ==> docker: -> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz ==> docker: Installing Python-3.6.1... ==> docker: Installed Python-3.6.1 to /root/.pyenv/versions/3.6.1 ==> docker: docker: Collecting pip docker: Downloading https://files.pythonhosted.org/packages/a4/6d/6463d49a933f547439d6b5b98b46af8742cc03ae83543e4d7688c2420f8b/pip-21.3.1-py3-none-any.whl (1.7MB) docker: Installing collected packages: pip docker: Found existing installation: pip 9.0.1 docker: Uninstalling pip-9.0.1: docker: Successfully uninstalled pip-9.0.1 docker: Successfully installed pip-21.3.1 docker: Collecting awscli docker: Downloading awscli-1.24.10-py3-none-any.whl (3.9 MB) docker: Collecting colorama<0.4.5,>=0.2.5 docker: Downloading colorama-0.4.4-py2.py3-none-any.whl (16 kB) docker: Collecting PyYAML<5.5,>=3.10 docker: Downloading PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl (640 kB) docker: Collecting docutils<0.17,>=0.10 docker: Downloading docutils-0.16-py2.py3-none-any.whl (548 kB) docker: Collecting botocore==1.26.10 docker: Downloading botocore-1.26.10-py3-none-any.whl (8.8 MB) docker: Collecting s3transfer<0.6.0,>=0.5.0 docker: Downloading s3transfer-0.5.2-py3-none-any.whl (79 kB) docker: Collecting rsa<4.8,>=3.1.2 docker: Downloading rsa-4.7.2-py3-none-any.whl (34 kB) docker: Collecting jmespath<2.0.0,>=0.7.1 docker: Downloading jmespath-0.10.0-py2.py3-none-any.whl (24 kB) docker: Collecting python-dateutil<3.0.0,>=2.1 docker: Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) docker: Collecting urllib3<1.27,>=1.25.4 docker: Downloading urllib3-1.26.9-py2.py3-none-any.whl (138 kB) docker: Collecting pyasn1>=0.1.3 docker: Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB) docker: Collecting six>=1.5 docker: Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) docker: Installing collected packages: six, urllib3, python-dateutil, jmespath, pyasn1, botocore, s3transfer, rsa, PyYAML, docutils, colorama, awscli docker: Successfully installed PyYAML-5.4.1 awscli-1.24.10 botocore-1.26.10 colorama-0.4.4 docutils-0.16 jmespath-0.10.0 pyasn1-0.4.8 python-dateutil-2.8.2 rsa-4.7.2 s3transfer-0.5.2 six-1.16.0 urllib3-1.26.9 ==> docker: WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv docker: Collecting virtualenv docker: Downloading virtualenv-20.14.1-py2.py3-none-any.whl (8.8 MB) docker: Requirement already satisfied: six<2,>=1.9.0 in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from virtualenv) (1.16.0) docker: Collecting importlib-resources>=1.0 docker: Downloading importlib_resources-5.4.0-py3-none-any.whl (28 kB) docker: Collecting importlib-metadata>=0.12 docker: Downloading importlib_metadata-4.8.3-py3-none-any.whl (17 kB) docker: Collecting platformdirs<3,>=2 docker: Downloading platformdirs-2.4.0-py3-none-any.whl (14 kB) docker: Collecting distlib<1,>=0.3.1 docker: Downloading distlib-0.3.4-py2.py3-none-any.whl (461 kB) docker: Collecting filelock<4,>=3.2 docker: Downloading filelock-3.4.1-py3-none-any.whl (9.9 kB) docker: Collecting typing-extensions>=3.6.4 docker: Downloading typing_extensions-4.1.1-py3-none-any.whl (26 kB) docker: Collecting zipp>=0.5 docker: Downloading zipp-3.6.0-py3-none-any.whl (5.3 kB) docker: Installing collected packages: zipp, typing-extensions, platformdirs, importlib-resources, importlib-metadata, filelock, distlib, virtualenv docker: Successfully installed distlib-0.3.4 filelock-3.4.1 importlib-metadata-4.8.3 importlib-resources-5.4.0 platformdirs-2.4.0 typing-extensions-4.1.1 virtualenv-20.14.1 zipp-3.6.0 docker: Collecting requests docker: Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB) docker: Requirement already satisfied: awscli in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from -r /opt/test1/test2/src/requirements.txt (line 2)) (1.24.10) docker: Collecting certifi>=2017.4.17 docker: Downloading certifi-2022.6.15-py3-none-any.whl (160 kB) docker: Collecting charset-normalizer~=2.0.0 docker: Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB) docker: Collecting idna<4,>=2.5 docker: Downloading idna-3.3-py3-none-any.whl (61 kB) docker: Requirement already satisfied: urllib3<1.27,>=1.21.1 in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from requests->-r /opt/test1/test2/src/requirements.txt (line 1)) (1.26.9) docker: Requirement already satisfied: colorama<0.4.5,>=0.2.5 in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from awscli->-r /opt/test1/test2/src/requirements.txt (line 2)) (0.4.4) docker: Requirement already satisfied: rsa<4.8,>=3.1.2 in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from awscli->-r /opt/test1/test2/src/requirements.txt (line 2)) (4.7.2) docker: Requirement already satisfied: s3transfer<0.6.0,>=0.5.0 in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from awscli->-r /opt/test1/test2/src/requirements.txt (line 2)) (0.5.2) docker: Requirement already satisfied: docutils<0.17,>=0.10 in /root/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from awscli->-r /opt/test1/test2/src/requirements.txt (line 2)) (0.16) docker: Installing collected packages: idna, charset-normalizer, certifi, requests docker: Successfully installed certifi-2022.6.15 charset-normalizer-2.0.12 idna-3.3 requests-2.27.1 ==> docker (docker-tag): Deprecation warning: "tag" option has been replaced with "tags". In future versions of Packer, this configuration may not work. Please call `packer fix` on your template to update.

追記:buildした後に下記のdocker runコマンドでコンテナを起動していますが、cannot execute binary fileというエラーが出たので、7行目のbashをコメントアウトしたのですが、それが影響しているでしょうか?

↓docker runのスクリプト

sh

#!/bin/sh docker run -it \ -v ``${PWD%/*}``/src:/opt/test1/test2/src \ -v ~/.aws:/root/.aws \ test1/test2 bash

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori

2022/06/22 13:15

docker にわざわざ pyenv を入れる意味が分かりません。使いたいバージョンの python イメージを使えば良いのでは…。
quickquip

2022/06/24 02:51

パッと見で eval "$(pyenv init --path)" をしてないなと思ったのですが、 {{user `pyenv_dir`}}/shims/pip とパスを直接指定しているし、 pyenv: command not found となるのとは関係ないな、という感想です。 pyenvの初期化の仕方が標準的ではないと思うのですが、それが意図的でやりたいことに対して必要なことだけをしたからこうなっているのか、pyenvのバージョンアップに追随してないだけなのか(そしてそれがエラーの原因になっているのか)、そのあたりの判断が第三者にはできない質問になっていると感じます。
yuta1989

2022/06/28 02:44

ご返信が遅くなりすみません。。 source ~/.bashrcコマンドを実行することで、pyenv: command not foundというエラーは出力されなくなりましたmm ご回答いただきありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。