質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

11293閲覧

(docker build) centos7で"timedatectl"に失敗する原因が知りたい

monumonu

総合スコア32

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2016/10/18 15:24

Dockerfile

FROM centos:7 MAINTAINER Hoge # setup environment #RUN timedatectl set-timezone Asia/Tokyo RUN timedatectl status

この内容でdocker build -t hoge .
を行うと、エラーになる。

Sending build context to Docker daemon 5.12 kB Step 1 : FROM centos:7 ---> 980e0e4c79ec Step 2 : MAINTAINER Hoge ---> Running in 3f35de46a780 ---> 3aae3b6225b8 Removing intermediate container 3f35de46a780 Step 3 : RUN timedatectl status ---> Running in 48ce390a96d8 Failed to create bus connection: No such file or directory Removing intermediate container 48ce390a96d8 The command '/bin/sh -c timedatectl status' returned a non-zero code: 1

Failed to create bus connection: No such file or directory
という箇所がsystemd関連でなっているかも、という所まで調べました。
ですが、

  1. どうしてこうなるのか
  2. docker build時にsystemctlを使うためにはどうすれば良いか(回避方法があるか)

を知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suama

2016/10/18 23:54

変えたいのはタイムゾーンだけでしょうか?環境変数で設定するのではだめでしょうか。
monumonu

2016/10/19 15:29

んー、タイムゾーンというか、そもそもsystemd関連の事をDockerfileの中で実行できないのを回避できないものなのかが知りたかった、です。
guest

回答2

0

自己解決

どうやらDockerfile内でsystemd関連のコマンドを実行できない(正確にはsystemctl enableとかのsymlink貼るくらいなら出来るけどデバイス接続できない)ようですね。
なので、そもそもDockerfile内でそういった事をやらないようにします。
ありがとうございました。

投稿2016/10/19 15:34

monumonu

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DockerHubのドキュメントに、Systemd integrationという項目がありますので、そちらを参考にされるといいと思います。
https://hub.docker.com/_/centos/

投稿2016/10/18 23:56

suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

monumonu

2016/10/19 15:32

一応今年8月頃に`docker pull centos:7`したやつから同じ事をやってみましたが、ダメでした。 docker run -d --privileged ... /sbin/init docker exec -it <container id> /bin/bash でsystemctl は使用可能なので、とりあえずDockerfile内でtimedatectlを使えなさそう、という事は納得しました。
suama

2016/10/19 23:59 編集

コメント、解決の方法の掲載もありがとうございます!(確かにRUNのところでは変更できませんでした) systemdを起動した状態のコンテナを上げて、そこからexecならできました。 --------------- $ container_id=`docker run -it -d --privileged=true centos:7 /usr/sbin/init` $ docker exec -it $container_id /usr/bin/timedatectl status Local time: Wed 2016-10-19 23:49:53 UTC Universal time: Wed 2016-10-19 23:49:53 UTC RTC time: Wed 2016-10-19 23:39:55 Time zone: UTC (UTC, +0000) NTP enabled: n/a NTP synchronized: no RTC in local TZ: no DST active: n/a $ docker exec -it $container_id /usr/bin/timedatectl set-timezone Asia/Tokyo $ docker exec -it $container_id /usr/bin/timedatectl status Local time: Thu 2016-10-20 08:44:27 JST Universal time: Wed 2016-10-19 23:44:27 UTC RTC time: Wed 2016-10-19 23:44:27 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: n/a NTP synchronized: no RTC in local TZ: no DST active: n/a ---------------
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問