LoginSignup
26
22

More than 5 years have passed since last update.

DockerfileでADDとchown/chmodの順序には気をつけよう

Last updated at Posted at 2014-02-24

はじめに

バグなのだと思うのですが(仕様としてはおかしいと思うので)、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 との順序が重要みたいです。

なんで、、という気分ですが、まあ、直ったということで良しとします。
皆さんもお気をつけ下さい。

26
22
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
26
22