Docker 1.13でnamed volumeをserviceから使うとエラーになる
Docker1.12からSwarm modeが新しく入り、Docker単体でクラスタが組めるようになりました。そのときに使うコマンドが docker serviceなのですが、1.13でnamed volumeを使おうとするとSELinuxがエラーを出してしまいます。
ボリューム作成
$ docker volume create hoge
hoge
$ docker volume ls
DRIVER VOLUME NAME
local hoge
ボリュームを使用してサービスを作成
$ docker service create --mount type=volume,src=hoge,dst=/test --restart-condition none --name test busybox ls /test/
ye4fz0ctomset25go7dd7euvz
$ docker service ls
ID NAME MODE REPLICAS IMAGE
ye4fz0ctomse test replicated 0/1 busybox:latest
サービスが立ち上がっていない
$ docker service ps test ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS tk99naov7vjk test.1 busybox:latest test-swarm3 Shutdown Rejected 2 minutes ago "SELinux relabeling of is not…"
エラーにSELinuxの文字が見える
docker service logsのコマンドがこのバージョンではExperimentalなのでエラーメッセージの確認が難しいです。
同じ問題に当たった人を探していたら、すでにGitHubのissueが立っていました。
dockerのバージョンが1.13かつdockerdのオプションに--selinux-enabledが設定されている場合のみ発生するようです。
検証環境
$ docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.3
Git commit: 092cba3
Built: Wed Feb 15 21:34:55 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.7.3
Git commit: 092cba3
Built: Wed Feb 15 21:34:55 2017
OS/Arch: linux/amd64
Experimental: false
$ cat /etc/os-release
NAME="Container Linux by CoreOS"
ID=coreos
VERSION=1325.0.0
VERSION_ID=1325.0.0
BUILD_ID=2017-02-15-2139
PRETTY_NAME="Container Linux by CoreOS 1325.0.0 (Ladybug)"
ANSI_COLOR="38;5;75"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://github.com/coreos/bugs/issues"