はじめに
前回下記のようなものを投稿していました。
herokuでイメージ・コンテナ作成するときは「docker-compose.yml」の「ports」って利用していないのでは?
検証方法
前回までは、テスト環境側のホストOSの環境変数、および本番環境であるherokuの環境変数に[wk_port]を追加し、下記の設定とした。
- テスト環境:8888
- 本番環境 :未設定
docker-compose.ymlは下記の状態
今、どっちの環境で動作してますよ、の判断を[wk_port]で行おうとしていた。
version: '3'
services:
<サービス名>:
build:
dockerfile: ./Dockerfile
ports:
- $wk_port:$wk_port
environment:
wk_port: $wk_port
ただ、本番環境(heroku)では[wk_port]が未設定にもかかわらず、アプリケーションは動作していたので、本番環境(heroku)では「ports」は利用していないと断定。
docker-compose.ymlは下記の状態に修正
今、どっちの環境で動作してますよ、の判断を新規の環境変数[mode]で行うように修正。
かつ、「ports」は「8888:8888」に修正し、テスト環境でのみポートフォワーディングとして利用。
version: '3'
services:
<サービス名>:
build:
dockerfile: ./Dockerfile
ports:
- 8888:8888
environment:
mode: $mode
Flask起動の判断も環境変数「mode」で行うように修正。
< 補足:modeの値 >
テスト環境:dev
本番環境 :pro
from flask import Flask
import os
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello world3'
if __name__ == '__main__':
if os.environ.get('mode','')=='dev':
app.run(debug='true',host='0.0.0.0',port='8888')
else:
app.run(debug='true',host='0.0.0.0',port=os.environ.get('PORT','5000'))
検証結果
うまくいきました。
ということで、herokuでイメージ・コンテナ作成するときは「docker-compose.yml」の「ports」って利用していない!ということですね