高木のブログ

Raspberry PiでDockerコンテナがホスト側と時間同期できない問題を解決する

2021/11/07

問題

コンテナ内で date コマンドを叩いても正しい時刻を取得できなかった

root@f38fb1bfdebb:/app# date
Thu Jan  1 00:00:00 UTC 1970

バージョン

  • Raspberry Pi OS: 10.11
  • Docker: 20.10.10

解決方法

libseccompパッケージに不具合があるようで、バージョンを上げたら解決する

$ wget http://ftp.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.2-2_armhf.deb
$ sudo dpkg -i libseccomp2_2.5.2-2_armhf.deb
root@d223d1edab89:/app# date
Fri Nov  5 16:11:48 UTC 2021

正しい時刻を取得することができた

$ rm libseccomp2_2.5.2-2_armhf.deb

もう必要ないので削除しておく

補足

Raspberry Piでとあるsinatraアプリを docker-compose build をした時に、 bundle install のタイミングでコケた
これで今回の問題に気づいた

Operation not permitted - clock_gettime (Errno::EPERM)

検索してもあまりヒットしなかったので、検索用にここに載せておく

$ docker-compose build
Building web
Step 1/4 : FROM ruby:2.7.4
 ---> e788dbf3e493
Step 2/4 : ADD . /app
 ---> Using cache
 ---> 6d275a173c7b
Step 3/4 : WORKDIR /app
 ---> Using cache
 ---> a1a7eae13717
Step 4/4 : RUN bundle install -j4
 ---> Running in c8c1d74a14a9
/usr/local/lib/ruby/2.7.0/rubygems/specification.rb:106:in `initialize': Operation not permitted - clock_gettime (Errno::EPERM)
        from /usr/local/lib/ruby/2.7.0/rubygems/specification.rb:106:in `now'
        from /usr/local/lib/ruby/2.7.0/rubygems/specification.rb:106:in `<class:Specification>'
        from /usr/local/lib/ruby/2.7.0/rubygems/specification.rb:39:in `<top (required)>'
        from /usr/local/lib/ruby/2.7.0/rubygems.rb:1417:in `require'
        from /usr/local/lib/ruby/2.7.0/rubygems.rb:1417:in `<module:Gem>'
        from /usr/local/lib/ruby/2.7.0/rubygems.rb:115:in `<top (required)>'
        from <internal:gem_prelude>:1:in `require'
        from <internal:gem_prelude>:1:in `<internal:gem_prelude>'
ERROR: Service 'web' failed to build : The command '/bin/sh -c bundle install -j4' returned a non-zero code: 1
$ docker-compose build
Building web
Step 1/4 : FROM ruby:2.7.4
 ---> e788dbf3e493
Step 2/4 : ADD . /app
 ---> Using cache
 ---> 6d275a173c7b
Step 3/4 : WORKDIR /app
 ---> Using cache
 ---> a1a7eae13717
Step 4/4 : RUN bundle install -j4
 ---> Using cache
 ---> e5e01b0c4a36

Successfully built e5e01b0c4a36
Successfully tagged home_api_web:latest

時刻同期できるようになったら、無事 docker-compose build が通った

参考

Raspberry Pi 4 に Docker と Docker Compose をインストールする | DevelopersIO


ytkg

Written by ytkg, Twitter, GitHub