はじめに
バグなのだと思うのですが(仕様としてはおかしいと思うので)、Dockerfileを書いていて、ADDとchownやchmodの順序によって意図しない挙動になることがあるので共有します。
動作Version
- docker
- Docker version 0.8.0, build cc3a8c8d8ec57e15b7b7316797132d770408ab1a
- docker host os (Mac)
- boot2docker: 0.5.4
現象
例えば、centosユーザ、の .ssh ディレクトリに authorized_keys を置いて、Permissionなどを設定したいということがあります。
その場合少なくとも下記の条件を満たす必要があります。
- ~/.ssh DIR は mode 700 でなくてはならない
- ~/.ssh DIR 以下の Owner は centosユーザでなくてはならない
それを以下のように書いたとします。
RUN mkdir -p /home/centos/.ssh
RUN chmod 700 /home/centos/.ssh
ADD centos.pub /home/centos/.ssh/authorized_keys
RUN chown centos:centos -R /home/centos
すると、Dockerfileのbuild 自体は成功するのですが、そのImageにログインして、
.ssh DIRにアクセスしようとすると、
# su - centos
% cd .ssh
cd: 許可がありません: .ssh
とエラーになってしまいます。
OwnerもPermissionも想定通りなのですが、何度やっても同じ現象になります。
また、
% sudo mv .ssh a
% mv a .ssh
% cd .ssh
とすると、今度はちゃんとcdできます。明らかに尋常ではないです。
解決法
https://github.com/dotcloud/docker/issues/1295
にも少し書いてありますが、順番を変えると直りました。
RUN mkdir -p /home/centos/.ssh
ADD centos.pub /home/centos/.ssh/authorized_keys
RUN chown centos:centos -R /home/centos
RUN chmod 700 /home/centos/.ssh
どうも ADD
との順序が重要みたいです。
なんで、、という気分ですが、まあ、直ったということで良しとします。
皆さんもお気をつけ下さい。