Dockerで環境変数を設定してPythonに表示してみたよ
目標
docker runコマンドの際に設定した環境変数を、コンテナ内のシェルスクリプトで実行したPythonでprintする。
想定
お仕事でAmazon ECSで環境変数(SMTPサーバー情報など)付きのdocker runコマンドを定時実行し、Pythonで環境変数を基に渡されたSMTPサーバー情報を基にメール定時送信システムを構築中。そのための自宅でのお試し環境変数いじり。
環境
PC:windows 10 home
docker tool-box
$ docker version
Client:
Version: 19.03.1
API version: 1.40
Go version: go1.12.7
Git commit: 74b1e89e8a
Built: Wed Jul 31 15:18:18 2019
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:28:45 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
とりあえずPythonのコンテナを立てる
$ docker run --env-file=env.txt -v /c/Users/.../environment_variable_test/code:/code -it python:3.6 bin/bash
root@82a5c3949b49:/#
$ docker run --env-file=env.txt -v /c/Users/.../environment_variable_test/code:/code -it python:3.6 bin/bash
root@82a5c3949b49:/#
docker runコマンドの実行はenv.txtのディレクトリで。
--env-file=env.txtで環境変数をしている。
ちなみに、env.txtは、
AAA=asdfgg
BBB=bnmbnm
CCC=cvbnm
環境変数はAAA, BBB, CCCの3つ。
せっかくなので別ファイルに分離させてみました。
docker runの環境変数設定はこちらに細かく載ってました↓
https://qiita.com/KEINOS/items/518610bc2fdf5999acf2
asdfgg, bnmbnm, cvbnをpythonで表示させたら勝ち。
-v /c/Users/.../environment_variable_test/code:/codeはディレクトリマウント。
ホスト側とdocker内のディレクトリが同期する。
ちなみにちゃんと環境変数が書き込まれてるが確認
参考:https://www.kabegiwablog.com/entry/2018/07/25/100000
root@82a5c3949b49:/# env | grep -e "AAA\|BBB\|CCC"
AAA=asdfgg
BBB=bnmbnm
CCC=cvbnm
root@82a5c3949b49:/#
シェルスクリプトとPythonファイルつくる
/c/Users/.../environment_variable_test/codeに作る。
#!/bin/sh
python test.py $AAA $BBB $CCC
echo "OK"
ハマりどころは1行目の#!/bin/sh入れないと.shと認識してくれない
あと、環境変数は$を付ける
test.pyに引数として環境変数たちを渡す。
echo "OK"はシェル上でOKと表示してくれる。おまけ。
#!/usr/bin/env python
import sys
args = sys.argv
print("第1引数:" + args[1])
print("第2引数:" + args[2])
print("第3引数:" + args[3])
こちらも1行目に#!/usr/bin/env python入れないと.pyと認識してくれない。
Pythonでの引数の操作はこちらを参照して↓
https://qiita.com/orange_u/items/3f0fb6044fd5ee2c3a37
root@82a5c3949b49:/code# bash test.sh
第1引数:asdfgg
第2引数:bnmbnm
第3引数:cvbnm
OK
root@82a5c3949b49:/code#
よっしゃ!OK!
蛇足ですが、#!/bin/sh: No such file or directoryとか出たら、各ファイルの文字コードを確認しましょう。
test.sh: line 1: #!/bin/sh: No such file or directory
第1引数:asdfgg
第2引数:bnmbnm
第3引数:cvbnm
OK
初心者の僕はメモ帳で開いて文字コード直して上書きしました
誤:UTF-8(BOM付き)
正:UTF-8
展望
Dockerfileにもまとめておきたいね。
今回使ったコードGitHubに載せました(コピペの方が早いけどw)
Author And Source
この問題について(Dockerで環境変数を設定してPythonに表示してみたよ), 我々は、より多くの情報をここで見つけました https://qiita.com/k-ashigaki/items/77564d620112381b5aee著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .