LoginSignup
2
2

More than 3 years have passed since last update.

Dockerでコンテナ起動時に実行するコマンドを環境変数から渡す方法

Last updated at Posted at 2020-06-02

個人的なメモ

検証環境でクライアントを見立てたホストを構築するのに使っている仕組みなので、セキュリティとかの考慮は一切ないです。
環境変数で設定の値だけじゃなくて、いっそのことコマンド自体を渡してしまおうという発想に至ってしまった自分を殺したい。

やり方

誰でも思いつく方法だと思うけど、単純に環境変数の中身をevalで実行するだけでいけた。

FROM centos:7.4.1708
ENV container docker

# required
# https://hub.docker.com/r/_/centos/
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]

RUN echo "eval \${STARTUP_RUN}" >> /etc/startup.sh
RUN echo "bash -c /etc/startup.sh" >> /etc/rc.local
RUN echo "/bin/bash">> /etc/rc.local
RUN chmod a+x /etc/rc.local
RUN chmod a+x /etc/startup.sh

CMD ["/bin/bash", "-c", "/etc/rc.local"]

環境変数で実行したいコマンドを渡してコンテナを動かす。

salacia@Vega:~/docker_env$ sudo docker run -it -d --name testhost --env STARTUP_RUN="echo 'hello' > /root/output" testimage
954f41cf05a374c00d74cd827bcd7409c150f60a1acd835824921523695404c5                                                                        

環境変数で指定したコマンドが実行されたことを確認する。

salacia@Vega:~$ sudo docker exec -it testhost cat /root/output
hello

結果

すごいことになる!

追記

今回rc.localやCMDに直接記述しなかったのは、rc.localに既にいくつかの処理を記述していて、rc.localに手を入れるのは最低限にしたかったためです。
シンプルにしたいならこんな感じで(動くことは確認してない)

FROM centos:7.4.1708

RUN echo "eval \${STARTUP_RUN}" >> /etc/startup.sh
RUN chmod a+x /etc/startup.sh
CMD ["/bin/bash", "-c", "/etc/startup.sh"]

docker-compose.ymlや、DockerfileのCMDに書いても動くと思います。(未検証)

2
2
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
2
2