画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

DockerfileでADDする時は~が使えない

バージョンなど

$ boot2docker -v
Boot2Docker-cli version: v1.3.1
$ docker -v

Docker version 1.3.1, build 4e9bbfa

動かなかった時のDockerfileは以下

FROM centos:centos6

MAINTAINER Mapyo

# Create vagrant user
RUN groupadd vagrant
RUN useradd vagrant -g vagrant


# Change user
USER vagrant
WORKDIR /home/vagrant
ENV HOME /home/vagrant

ADD test.txt ~/test.txt

こんな感じで書いてた。docker buildする時のフォルダには、もちろん、test.txtは存在している。

buildした時の結果も一見成功しているようにみえた。

Step 7 : ADD test.txt ~/test.txt
 ---> cda6ac3b2db4
Removing intermediate container 102d36aa40e9

Successfully built cda6ac3b2db4

しかし、実際に作ったイメージの中身を見てみると、存在しない。。。

# build時のコマンド
$ docker build -t test .
# コンテナを起動
$ docker run -i -t --name hoge test:latest /bin/bash

# 確認作業
$ pwd
/home/vagrant
$ ls -la
total 24
drwx------ 2 vagrant vagrant 4096 Nov 24 23:07 .
drwxr-xr-x 4 root    root    4096 Nov 24 23:07 ..
-rw------- 1 vagrant vagrant   20 Nov 24 23:08 .bash_history
-rw-r--r-- 1 vagrant vagrant   18 Oct 16 14:56 .bash_logout
-rw-r--r-- 1 vagrant vagrant  176 Oct 16 14:56 .bash_profile

-rw-r--r-- 1 vagrant vagrant  124 Oct 16 14:56 .bashrc

存在しない。。。。

動くようにする

上記のDockerfileのADDの部分を絶対パスにする。

ADD test.txt /home/vagrant/test.txt

確認作業

$ docker build -t test .
$ docker rm hoge
$ docker run -i -t --name hoge test:latest /bin/bash

# コンテナの中
$ ls -la
total 24
drwx------ 2 vagrant vagrant 4096 Nov 24 23:16 .
drwxr-xr-x 4 root    root    4096 Nov 24 23:16 ..
-rw-r--r-- 1 vagrant vagrant   18 Oct 16 14:56 .bash_logout
-rw-r--r-- 1 vagrant vagrant  176 Oct 16 14:56 .bash_profile
-rw-r--r-- 1 vagrant vagrant  124 Oct 16 14:56 .bashrc
-rw-r--r-- 1 root    root      11 Nov 24 21:44 test.txt

存在している!

しかし、権限周りがrootになってしまっているので、ちゃんと使うのであれば、 権限の変更が必要。 なので、以下のように変更する

ADD test.txt /home/vagrant/test.txt

USER root
RUN chown vagrant:vagrant ~/test.txt

確認

$ docker build -t test .
$ docker rm hoge
$ docker run -i -t --name hoge test:latest /bin/bash

# コンテナの中
$ ls -la
total 24
drwx------ 2 vagrant vagrant 4096 Nov 24 23:19 .
drwxr-xr-x 5 root    root    4096 Nov 24 23:19 ..
-rw-r--r-- 1 vagrant vagrant   18 Oct 16 14:56 .bash_logout
-rw-r--r-- 1 vagrant vagrant  176 Oct 16 14:56 .bash_profile
-rw-r--r-- 1 vagrant vagrant  124 Oct 16 14:56 .bashrc
-rw-r--r-- 1 vagrant vagrant   11 Nov 24 21:44 test.txt

ちゃんと権限が変わっている事が確認出来た。

ちなみに

今回書いたDockerfileは以下。

FROM centos:centos6


MAINTAINER Mapyo

# Create vagrant user
RUN groupadd vagrant
RUN useradd vagrant -g vagrant

# Change user
USER vagrant
WORKDIR /home/vagrant
ENV HOME /home/vagrant

ADD test.txt /home/vagrant/test.txt

USER root
RUN chown vagrant:vagrant ~/test.txt

rootユーザになっても、WORKDIRENV HOME環境変数は生きているのがちょっと不思議だった。そういうもんかー