Docker Ansible服务重新启动不起作用

Docker Ansible服务重新启动不起作用,docker,nginx,service,vagrant,ansible,Docker,Nginx,Service,Vagrant,Ansible,我使用Ansible来提供一个装有流浪者的码头集装箱 My Ansible文件包含启动nginx的以下部分: - name: nginx started service: name: nginx state: restarted 据我所知,本节应该在所有情况下重新启动nginx,但当我通过SSH连接到容器时,nginx没有运行(整个Ansible资源调配过程成功,在/var/log/nginx/error.log中没有nginx的日志)。当我手动键入以下命令时,它会正确启动

我使用Ansible来提供一个装有流浪者的码头集装箱

My Ansible文件包含启动nginx的以下部分:

- name: nginx started
  service:
    name: nginx
    state: restarted
据我所知,本节应该在所有情况下重新启动nginx,但当我通过SSH连接到容器时,
nginx
没有运行(整个Ansible资源调配过程成功,在
/var/log/nginx/error.log
中没有nginx的日志)。当我手动键入以下命令时,它会正确启动:
sudo service nginx start

但是,当我将上述部分替换为:

- name: nginx restarted
  command: service nginx restart
这个问题似乎不仅限于
nginx
,在其他服务中也会出现,如
syslog ng

你知道为什么使用Ansible
服务不起作用吗?(docker 17.10.0,Vagrant 2.0.1,Ansible 2.4.0)

请看一看,我认为可能与此有关

据他们说:

…这不是特定于服务的。重新启动/重新加载选项为 当前调用底层init系统的简单选项 脚本(如果成功)返回成功

所以,也许这就是为什么即使在美国,你也能找到一个你试图实现的例子:

# Example action to restart service httpd, in all cases
- service:
    name: httpd
    state: restarted
但是对于nginx不起作用,因为它可能不受支持

从您的解决方案中删除:

- name: nginx restarted
  command: service nginx restart
您可以通过以下方式实现:

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

Ansible
服务
模块。
对于docker映像,模块只需启动
/sbin/initctl stop nginx/sbin/initctl start nginx
位于容器内,该容器与此图像中更改的初始化系统相同()

因此,问题在于ansible无法正确检测到映像的不一致初始系统状态

解决办法是:

  • 编写一个
    myu init
    ansible模块(服务模块首先尝试使用
    {{ansible\u service\u mgr}}
    module[])
  • 从映像中删除
    initctl
    ,这样ansible将不会检测到任何init系统,并将使用
    service
    命令(可能会在中引发问题)
  • 使用
    命令
    模块明确使用
    服务
    命令,就像您最后所做的那样

您的容器运行的Docker映像是什么?@zigarn我的容器基于此映像:(phusion/baseimage)。感谢链接。是的,这肯定是同一个问题。关于你给我的最后一个例子,为什么它比我尝试的第一个解决方案更有效?只是语法不同,对吧?是的,我写它是作为另一种方法,两者都应该有效。嗯。。。我刚刚再次检查,这两种解决方案都不起作用。唯一有效的解决方案是使用
命令
。我还尝试了Ansible Github问题中提到的
停止
启动
。不管怎样,我现在要保留第一个解决方案。正如您所说,nginx可能不受支持。谢谢,谢谢你的解释。