タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【Docker】DokuWikiバックアップコンテンツを復元できなくなる(tar: can't open '/backup/dw-backup.tgz': Permission denied)

Dockerをオンプレミスで利用するようになって、しばらく経ちますが、自分でDockerfileを書いて「infrastructure as a code」も実現できますし、「Docker Hub」から必要なものを取り込むことも容易にできて、もう、便利過ぎてDocker無しでは考えられません!

その中で、自分なりに、はまった内容をまとめておきたいと思います。

wikiサイトを調べていて、「DokuWiki」というオープンソースを試そうと思い、Docker Hubから、vimagick/dokuwikiをpullして、テストした際に発生したものです。
こちらのDockerイメージは、Alpine Linuxを使っていて、容量がとても小さい!
さらに、コンテンツのバックアップもリストア方法のコマンドも「Repo info」にまとめていただいており、大変ありがたい公開イメージです。

ところが、復元コマンドを実施した際に、「tar: can't open '/backup/dw-backup.tgz': Permission denied」というエラーメッセージになり、コンテンツの復元ができない事態になってしまいました。

発生Version

  • CentOS7.2
  • docker1.10.3 (yum docker installでインストールしたもの)
# docker -v
Docker version 1.10.3, build 9419b24-unsupported

※ちなみに、Docker1.7.0では、エラーにならず、うまくいきました!

エラー内容

# systemctl start docker

# docker run -d -p 8000:80 --restart always --name dokuwiki vimagick/dokuwiki

# docker run --rm --volumes-from dokuwiki -v `pwd`:/backup alpine tar czf /backup/dw-backup.tgz /var/www/html
Unable to find image 'alpine:latest' locally
Trying to pull repository docker.io/library/alpine ...
latest: Pulling from docker.io/library/alpine
:
Status: Downloaded newer image for docker.io/alpine:latest
tar: can't open '/backup/dw-backup.tgz': Permission denied

問題解決

  • Dockerを最新版(2016-07-27 1.11.2, build b9f10c9)を適用し、解決できました!

(1) 現VersionのDockerの削除

# yum list installed|grep docker
docker.x86_64                         1.10.3-44.el7.centos             @extras
docker-common.x86_64                  1.10.3-44.el7.centos             @extras
docker-forward-journald.x86_64        1.10.3-44.el7.centos             @extras
docker-selinux.x86_64                 1.10.3-44.el7.centos             @extras

# yum remove -y docker.x86_64 
# yum remove -y docker-selinux.x86_64
# yum remove -y docker-forward-journald.x86_64
# yum remove -y docker-selinux.x86_64

(2) 最新版のDockerインストール

curl -sSL https://get.docker.com/ | sh

# curl -sSL https://get.docker.com/ | sh
+ sh -c 'sleep 3; yum -y -q install docker-engine'
warning: /var/cache/yum/x86_64/7/docker-main-repo/packages/docker-engine-selinux-1.11.2-1.el7.centos.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
Public key for docker-engine-selinux-1.11.2-1.el7.centos.noarch.rpm is not installed
Importing GPG key 0x2C52609D:
 Userid     : "Docker Release Tool (releasedocker) <docker@docker.com>"
 Fingerprint: 5811 8e89 f3a9 1289 7c07 0adb f762 2157 2c52 609d
 From       : https://yum.dockerproject.org/gpg
restorecon:  lstat(/var/lib/docker) failed:  No such file or directory
warning: %post(docker-engine-selinux-1.11.2-1.el7.centos.noarch) scriptlet failed, exit status 255
Non-fatal POSTIN scriptlet failure in rpm package docker-engine-selinux-1.11.2-1.el7.centos.noarch

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!


# docker -v
Docker version 1.11.2, build b9f10c9

(3) Dokuwiki復元テスト

# systemctl start docker

# docker run -d -p 8000:80 --restart always --name dokuwiki vimagick/dokuwiki

# docker run --rm --volumes-from dokuwiki -v `pwd`:/backup alpine tar czf /backup/dw-backup.tgz /var/www/html
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
:
Status: Downloaded newer image for alpine:latest
tar: removing leading '/' from member names

(4) サイト確認

無事、リストアされました!

ちなみに、2016-08-03時点では、Docker 1.12.0がリリースされています。

新しいVersionを、積極的に試していく前向きさが必要であることを痛感した出来事でした。

それと、Linuxコマンドを深く理解することも重要であることも・・・!