FreeStyleWiki

Dockerのトラブルシュート

このエントリーをはてなブックマークに追加

[Docker]

Dockerのトラブルシュート

  dockerの保持するデータが増えたとき

ただし使っているデータも消えたりするので、やる前に消えてもいいか覚悟が必要。

+ 作業ログ

  • 消す対象を絞り、シェル+docker-composeで一気に消す場合
docker-compose stop
yes | docker-compose rm
docker volume ls -q | grep {プロジェクト名称} | xargs docker volume rm

  Linuxでdockerをやるときにcgroupがどうとかで起動できない

理由は詳しく調べてないが、以下で解決する

sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

  docker-desktopがLinuxで動かない

  dockerコンテナ上のCentOSでのsystemctlの問題

dockerは基本1プロセスで動かすことを想定されているので、systemctlを使うようにするには/sbin/initをDockerfileのCMDで指定してあげる必要がある。

そして、そのあたりの話はCentosの公式リポジトリで解決されているので、ドキュメント通りにDockerfileを使えばよい。

FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

https://hub.docker.com/_/centos より

何でもいいのでとりあえず最後に/user/sbin/initを起動しとけばコンテナ起動後にsystemctlが操作できるはず。

  dockerコンテナ上のCentOSでのsystemctl実行時D-Busでエラーになる問題

で、上の流れでCentosのコンテナを起動すると

Failed to get D-Bus connection: Operation not permitted

とか

Failed to get D-Bus connection: No such file or directory

のエラーメッセージが出て起動できない。

これはリンク先とか他のQiitaの記事でもかなり書かれている。

docker-desktopを使った状態で、"deprecatedCgroupv1": trueにすれば解決します。

cgroupの(おそらくファイルシステム的なもの)バージョンが異なるためのエラーのようです。Centosのコンテナ側のcgroupとホスト側のcgroupに差異がある。

docker-desktopを使ってない場合、dockerdのランタイム用のオプションを使って制御できるのかもしれませんが、そういった情報は見つかりませんでした。