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

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

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

Q&A

解決済

1回答

1365閲覧

Dockerコンテナ上のPythonファイルの内容をブラウザに出力できない

suika11

総合スコア166

0グッド

0クリップ

投稿2022/01/13 13:01

編集2022/01/15 03:33

前提・実現したいこと

DockerでPythonを実行するコンテナを作るを元にwebブラウザの画面上にpythonファイルの出力結果を表示したいのですが、printの結果が表示されず真っ白のままです。htmlは画面に表示され、コードの変更も反映されます。リンク内容の変更箇所は以下のみで、コードやコマンドも同じものを使用しました。

・プロジェクトフォルダのパスをdescktop直下に配置

http://localhost:5000の表示結果

該当のソースコード

index.py

1#!/usr/bin/env python3 2 3print("Content-type: text/plain\n") 4print("Hello! Python on Docker!")

Dockerfile

1FROM python:alpine 2 3WORKDIR /app 4 5COPY . /app 6 7CMD ["python","-m","http.server","--cgi"] 8

index.html

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="utf-8"> 6 <title>Test Page</title> 7</head> 8 9<body> 10 <h1>Welcome to Python!</h1> 11 <p>This is test page.<br>Edited.</p> 12</body> 13 14</html>

試したこと

「python ブラウザに出力できない」等のワードで検索

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

Python 3.10.1
Docker 20.10.11

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

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

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

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

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

sigsegv

2022/01/13 13:31 編集

「htmlが出力できている」とは何をもってそう判断したのですか リンク先のページと同じ作業をしたものとしますが、どこまで同じでどこが違うのですか (Dockerfileにshebangがついてますが、他は同じですか)
suika11

2022/01/13 13:38

「htmlが出力できている」はタグの内容(h1やpのテキスト)がブラウザの画面に表示されているという意味でした。 ファイルの内容とコマンド、どちらもコピペしました。 リンクではプロジェクトフォルダのパスが「/Users/test/docker/python/」ですが、自分は「descktop/python」にしました。
sigsegv

2022/01/14 01:20

リンク先のDockerfileの先頭に #!/usr/bin/env python3 は無いですよね? だからすでにコピペを間違っています。
sigsegv

2022/01/14 01:27

質問に慣れてないようなので一応書きますが、あなたの質問文は(いろいろ)情報不足で 何がどうなったのか読み手に伝わりません。 今回の場合は、リンク先に従って作業したのでしょうから、どこまで(完全に)同じなのか、どこから違っているのか(それはどう違っているのか)を書くとわかりやすいでしょう。
suika11

2022/01/14 06:12

質問文に不備や瑕疵があり申し訳ありませんでした。一度初めからやり直し、質問文を修正します。
guest

回答1

0

長くなるのでこちらに書きます。

質問者さんの状況は、http://localhost:5000/ は正常に表示できて、index.htmlの変更も反映されるがhttp://localhost:5000/cgi-bin/index.py は何も表示されない、ということですね

一応こちらで、質問に書かれたファイルでコンテナを作ってみて、index.htmlの方もindex.pyの方も問題なく動作することを確認しました(環境はCentOS8)。質問文に書かれた範囲には問題ありません。

うまくいかない原因はOSや環境の問題なども考えられ、情報無しでは特定できません。
ただ一番シンプルなミスは、cgi-bin や index.py のパーミションの設定漏れです。まずはそのあたりを確認してみてはどうでしょう。

もしくはログを確認してみてください。

docker logs コンテナ名

で表示されます。コンテナ名は docker ps で確認してください。

正常であれば

172.17.0.1 - - [16/Jan/2022 09:24:22] "GET /cgi-bin/index.py HTTP/1.1" 200 -

というようなログが表示されるはずです。(200が正常の意味)

投稿2022/01/16 09:45

sigsegv

総合スコア895

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

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

suika11

2022/01/16 14:10

ご指摘の通り、パーミッションの設定でindex.pyのprintの結果が画面に表示されました。助かりました。パーミッションもよく分からなかったので勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問