2017-11-21 16 views
1

DockerコンテナにVagrantをプロビジョニングするために、私はAnsibleを使用します。サービスが再起動する可能性がありません

マイAnsibleファイルは、nginxの起動するには、次のセクションが含まれます。私が理解から

- name: nginx started 
    service: 
    name: nginx 
    state: restarted 

を、このセクションでは、すべてのケースでnginxのを再起動する必要がありますが、私はコンテナにSSH経由で接続したときに、nginxが実行されていません(Anabilitiesプロビジョニングプロセス全体が成功すると、nginxのログは/var/log/nginx/error.logにありません)。次のコマンドを手動で入力すると正しく開始されます。sudo service nginx start

しかし、それは私がすることにより、上記のセクションを交換するときに動作します:

- name: nginx restarted 
    command: service nginx restart 

問題がnginxに限定されるものではなく思える、ともsyslog-ngなどの他のサービスで発生します。

Ansible serviceを使用する理由は何ですか? (docker 17.10.0、Vagrant 2.0.1、Ansible 2.4.0)

+0

コンテナが実行されるDockerイメージとは何ですか? – zigarn

+0

@zigarn私のコンテナはこの画像に基づいています:https://github.com/phusion/baseimage-docker(phusion/baseimage)。 – jean553

答えて

1

Ansible serviceモジュールtry to guess the underlying init system:あなたが使用していることを達成することができます

- name: nginx restarted 
    command: service nginx restart 

:あなたのソリューションから

アパート。
phusion/baseimageドッカー画像の場合、it finds /sbin/initctlですので、モジュールは/sbin/initctl stop nginx; /sbin/initctl start nginxをコンテナ内に起動します。この画像では、does nothingがinitシステムとして変更されています(my_init)。

したがって、問題が発生した場合、正しく検出されないイメージのinitシステムの状態が矛盾します。

溶液である:

  • のでansible任意initシステムを検出しないであろう、画像からinitctlを除去
  • (サービスモジュールが{{ ansible_service_mgr }}モジュールを使用する最初の試みる[code])my_init ansibleモジュールを書きますserviceコマンドを使用します(phusion/baseimage-dockerで問題が発生する可能性があります)
  • コマンドを明示的に使用するcommandモジュールを使用して、最終的に
+0

説明をありがとう。 – jean553

0

this ansible issueをご覧ください。それらによると

...これは、特定のサービスではありません。でもAnsible documentationにあなたは何の例を見つけることができる理由をリロード/再起動オプションが根底にあるのinitシステムの成功を返します(成功した場合) スクリプトを呼び出す 現在の単純なオプション...

だから、あるおそらくそれですあなたが達成しようとしていた。

# Example action to restart service httpd, in all cases 
- service: 
    name: httpd 
    state: restarted 

をしかし、それはサポートされていない可能性としてnginxのでは動作しません。

- name: restart nginx 
    service: name=nginx state=restarted 
+0

リンクをありがとう。はい、これは間違いなく同じ問題です。あなたが私に与えた最後の例に関して、なぜ私が試した最初の解決策よりもうまくいくのでしょうか?構文だけが違っていますよね? – jean553

+0

ええ、私は別のアプローチとしてそれを書いています。どちらもうまくいくはずです。 – juanlumn

+0

Hmmm ...もう一度チェックしたところ、これらの2つのソリューションのどちらも機能しません。唯一の解決策は 'command'を使う方法です。私はまた、Ansible Githubの問題に言及したように、「停止」と「開始」を試みました。とにかく、私は今、最初の解決策を残しています。あなたが言ったように、nginxはサポートされていない可能性があります。ありがとう。 – jean553

関連する問題