質問するログイン新規登録
Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

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

Python

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

Q&A

解決済

1回答

381閲覧

Ubuntu22.04,apache,内でDockerを使い、app.pyを実行したい

oyatsu8

総合スコア97

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

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

Python

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

0グッド

0クリップ

投稿2024/01/11 02:54

編集2024/01/11 14:40

0

0

実現したいこと

さくらのVPSを借りています。サーバにUbuntu22.04とapache2をインストールしました。sshに一般ユーザで入り、Dockerを使い、app.pyを実行したいです

発生している問題・分からないこと

Dockerをビルドして
$ sudo docker logs flask_py01 を実行すると、次のエラーが出てしまいます。
python3: can't open file '/app/app.py': [Errno 2] No such file or directory

ディレクトリの設定が間違っているのではないかと思って色々書き換えているのですが、エラーが直りません。

該当のソースコード

- VPSで入った最初の場所 - app - app.py - Dockerfile - certbot - docker-compose.yml

docker-compose.yml

yml

1version: '3' 2services: 3 web: 4 image: python:3.10.12 5 volumes: 6 - ./app:/app 7 ports: 8 - "5000:5000"

Dockerfile

$ sudo vim Dockerfile FROM ubuntu:22.04 # パッケージリストの更新とPython 3.10、pip3、その他依存パッケージのインストール RUN apt-get update && \ apt-get install -y python3.10 python3-distutils python3-pip # Python 3.10をデフォルトに設定 RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 # Flaskのインストール(特定のバージョン) RUN pip3 install Flask==2.0.1 Werkzeug==2.0.2 # コンテナ内での作業ディレクトリの設定 WORKDIR /app # Flaskアプリケーションのコピー COPY . . # Flaskアプリケーションの実行 CMD ["python3", "app.py"]

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

上記の状態で

新しいイメージのビルド

sudo docker build -t flask_py .

Dockerコンテナの実行

sudo docker run --name flask_py01 -p 5000:5000 -d flask_py

ログを見るとエラーになる

$ sudo docker logs flask_py01
python3: can't open file '/app/app.py': [Errno 2] No such file or directory

Dockerfileのディレクトリの設定が間違っているのかと、色々試しましたが、エラーが直りません。アドバイスを頂けたら幸いです。

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

dockerは使ったことがないのですが、

# Flaskアプリケーションのコピー COPY . .

これが、「(ホストPCの)カレントディレクトリの内容を、(docker内の)カレントディレクトリにコピーする」ということをやっているのだろうなぁ、ということはなんとなくわかります。
では、「カレントディレクトリ」とはどこなのでしょう。

docker内は、直前で「WORKDIR /app」としているので、「/app」なのはわかります。
では、ホストPCは?
普通に考えれば、dockerコマンドを実行した場所であり、Dockerfile がある場所なのではないですか。

つまり、Dockerfileのある場所をコピーしているので、app/app.pyappディレクトリごとコピーされることになり、コピーされた結果、app.pyはdocker内には/app/app/app.pyにあるのではないですか。
当然、/appをカレントディレクトリとして「python3 app.py」を実行すれば、app.pyが見つからないことになります。

dockerを使ったことはないので憶測ですが、おそらくこう書くべきではないですか。

# Flaskアプリケーションのコピー COPY app/. .

相対パスを使う際には、常に「どこからの相対なのか」を考えましょう。

投稿2024/01/11 23:28

katsuko

総合スコア3601

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

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

oyatsu8

2024/01/12 02:31

大変ありがとうございます。言われた通りにしてみたら実行することができました。Dockerが初めてで、しかもUbuntuもほぼ初めてなので、ディレクトリの理解が出来ていませんでした。相対パスを使う際には、常に「どこからの相対なのか」を考えて理解していこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問