スパゲッティ生産所

コードの走り書きとかメモとか日常のこととか

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が立っていました。

github.com

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"