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