概要
Dockerfile 内で ENV コマンドで設定した環境変数は、docker run 時に起動する bash では環境変数が参照できますが、ssh ログインした際には参照できません。
以下の Dockerfile でビルドしたイメージでコンテナを作成した場合...
Dockerfile
1FROM ubuntu:16.04 2ENV LANG C.UTF-8 3 4RUN apt-get update && \ 5 apt-get install -y openssh-server && \ 6 sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \ 7 echo "root:root" | chpasswd 8 9CMD service ssh start && /bin/bash
docker run
で起動した場合は、ENV で設定した LANG
が参照できる。
bash
1$ docker build --tag test . # ホスト側 2$ docker run -itP -p 2222:22 --rm test # ホスト側 3$ echo $LANG # コンテナ側 4C.UTF-8
ssh ログインした場合には参照できない。
bash
1$ ssh -p 2222 root@localhost # ホスト側 2# password は root 3$ echo $LANG # コンテナ側 4 5# 環境変数が参照できない
そのため、SSH ログインした際にも参照できるように Dockerfile 内で ENV で設定した環境変数は、以下のように ~/.bashrc にも記載するようにしているのですが、環境変数がたくさんあると Dockerfile が冗長になります。
Dockerfile
1FROM ubuntu:16.04 2ENV LANG C.UTF-8 3# ~/.bashrc にも書いてる。 4RUN echo 'export LANG="C.UTF-8"' >> ~/.bashrc 5 6RUN apt-get update && \ 7 apt-get install -y openssh-server && \ 8 sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \ 9 echo "root:root" | chpasswd 10CMD service ssh start && /bin/bash
聞きたいこと
- SSH ログインした場合にも環境変数を参照できるように設定する良い方法があれば、教えてください。
- そもそも Docker コンテナに入る方法として、SSH サーバーを立ててログインする方法が bad practice なのでしょうか?(docker attach で入るべき?)
補足
- Docker コンテナは開発環境として利用しています。(Python スクリプトを動かしたり)
- SSH サーバーを立ててログインしている理由はコンテナとホストでファイルを転送するのが楽だからです。
自分はこうしてる等でもよいので、アドバイスがあればよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/23 15:22 編集
2018/11/24 01:27
2018/11/24 12:05