1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerで環境変数を設定してPythonに表示してみたよ

1
Last updated at Posted at 2020-05-11

目標

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.txtのディレクトリで。
--env-file=env.txtで環境変数をしている。
ちなみに、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に作る。

test.sh
# !/bin/sh
python test.py $AAA $BBB $CCC
echo "OK"

ハマりどころは1行目の#!/bin/sh入れないと.shと認識してくれない
あと、環境変数は$を付ける
test.pyに引数として環境変数たちを渡す。

echo "OK"はシェル上でOKと表示してくれる。おまけ。

test.py
# !/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
image.png

展望

Dockerfileにもまとめておきたいね。

今回使ったコードGitHubに載せました(コピペの方が早いけどw)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?