Docker Ansible服务重新启动不起作用
我使用Ansible来提供一个装有流浪者的码头集装箱 My Ansible文件包含启动nginx的以下部分: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的日志)。当我手动键入以下命令时,它会正确启动
- 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可能不受支持。谢谢,谢谢你的解释。