実現したいこと
Dockerに.pyenvのフォルダをマウントしたものの、Dockerfileで環境変数を設定しても、Dockerfile内でpyenvコマンドが使えません。
nvidia-cudaを用いて環境構築を行うときのベストプラクティスも知りたいのですが、何故pyenvのコマンドが見つけられないか、それに対処するにはどうすれば良いかが一番知りたいです。
発生している問題・分からないこと
docker compose upをした際に、以下のエラーが発生する。
#0 0.398 /bin/bash: pyenv: command not found
該当のソースコード
docker
1services: 2 ub1804_cuda121_poetry_pyenv: 3 build: 4 context: . 5 dockerfile: Dockerfile 6 container_name: ub1804_cuda121_poetry_pyenv 7 runtime: nvidia 8 environment: 9 - NVIDIA_VISIBLE_DEVICES=4 10 - NVIDIA_DRIVER_CAPABILITIES=compute,utility 11 volumes: 12 - /home/username/projectname:/projectname 13 - /home/username/.pyenv:/root/.pyenv 14 stdin_open: true 15 tty: true 16 deploy: 17 resources: 18 reservations: 19 devices: 20 - driver: nvidia 21 count: 1 22 capabilities: [gpu] 23
Dockerfile
1FROM nvidia/cuda:12.1.0-devel-ubuntu18.04 2 3SHELL ["bash", "-c"] 4 5# Set pyenv environment variables 6ENV PYENV_ROOT="/root/.pyenv" 7ENV PATH="$PYENV_ROOT/bin:$PATH" 8 9RUN sed -i '/\[ -z "\$PS1" \] && return/d' ~/.bashrc 10 11# Install pyenv dependencies 12RUN apt-get update && apt-get install -y \ 13 git \ 14 curl \ 15 wget \ 16 build-essential \ 17 libssl-dev \ 18 zlib1g-dev \ 19 libbz2-dev \ 20 libreadline-dev \ 21 libsqlite3-dev \ 22 libffi-dev \ 23 python3-pip \ 24 && apt-get clean && rm -rf /var/lib/apt/lists/* 25 26 27# Install pyenv 28# RUN curl https://pyenv.run | bash 29 30# Initialize pyenv in the shell 31RUN echo 'eval "$(pyenv init --path)"' >> ~/.bashrc && \ 32 echo 'eval "$(pyenv init -)"' >> ~/.bashrc && \ 33 echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc 34 35# Install and set global Python version 36RUN /bin/bash -c "source ~/.bashrc && \ 37 pyenv install 3.11.9 && \ 38 pyenv global 3.11.9" 39 40# poetry のインストール 41RUN curl -sSL https://install.python-poetry.org | python3 - 42ENV PATH="/root/.local/bin:$PATH" 43 44# 作業ディレクトリ 45WORKDIR /projectname 46 47# デフォルトコマンド 48CMD ["bash"] 49
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
シェルを変えたり、このサイトを参考にしたり、いろいろと試しましたが、わかりませんでした。
docker runでコンテナ内に入って、実際に環境変数の設定だけ行うと、想定通りに動きます。
Dockerfileでビルドできない理由はよくわかっていません。
補足
- Docker Compose version v2.18.1
- docker version
Client: Docker Engine - Community
Version: 24.0.2
Server: Docker Engine - Community
Engine:
Version: 19.03.13
回答1件
あなたの回答
tips
プレビュー