2017-11-21 15 views
1

Docker 컨테이너에 Vagrant를 제공하려면 Ansible을 사용합니다.서비스가 다시 시작될 수 없습니다.

내 Ansible 파일을 시작하려면 다음 섹션이 포함 nginx를 :

내가 이해에서
- name: nginx started 
    service: 
    name: nginx 
    state: restarted 

,이 섹션은 모든 경우에 nginx를 다시 시작해야합니다,하지만 난 컨테이너에 SSH를 통해 연결할 때, nginx가 실행되고 있지 (전체 무언가 제공 프로세스가 성공하면 /var/log/nginx/error.log에 nginx에 대한 로그가 없습니다). 다음 명령을 수동으로 입력하면 올바르게 시작됩니다 : sudo service nginx start.

- name: nginx restarted 
    command: service nginx restart 

이 문제가 nginx에 한정되지 않고, 보인다, 또한 syslog-ng 같은 다른 서비스 일 : 나는 이상 부분을 교체 할 때

그러나, 그것은 작동합니다.

Anecess 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.
phusion/baseimage 도커 이미지의 경우 it finds /sbin/initctl이므로 모듈은이 이미지 (my_init)에서 초기화 시스템으로 does nothing이 변경된 컨테이너 내에 /sbin/initctl stop nginx; /sbin/initctl start nginx을 실행하기 만하면됩니다.

따라서 문제가되는 것은 이미지를 제대로 인식하지 못하는 init 시스템 상태가 일관성이 없다는 것입니다.

용액은 :

  • my_init ansible 모듈 물품 (서비스 모듈은 {{ ansible_service_mgr }} 모듈을 사용하는 첫 번째 시도 [code])는
  • 이미지에서 initctl 제거하므로 ansible는 초기화 시스템을 검출되지 service 명령을 사용합니다 (phusion/baseimage-docker에 문제 제기 가능)
  • 명령을 명시 적으로 사용하는 command 모듈을 사용하십시오.
+0

설명해 주셔서 감사합니다. – jean553

0

이 부분을 보시려면 this ansible issue와 관련이 있다고 생각합니다.

그들에 따르면

을 ...이 특정 서비스를 제공하지 않습니다. 다시 시작한/리로디드 옵션은 예를 찾을 수있는 이유도 Ansible documentation의 기본 초기화 시스템을 (성공하면) ... 성공 그래서

를 반환, 아마 그건 스크립트를 호출 현재 간단한 옵션이 무엇인지 당신은 달성하기 위해 노력하고 있었다 :

# 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 
+0

링크를 제공해 주셔서 감사합니다. 예, 이것은 확실히 동일한 문제입니다. 당신이 나에게 준 마지막 예에 관해서, 내가 시도한 첫 번째 해결책보다 더 효과가있는 이유는 무엇입니까? 구문 만 다릅니다. – jean553

+0

그래, 나는 그것을 다른 접근법으로 썼다. 둘 다 작동해야한다. – juanlumn

+0

흠 ... 방금 다시 확인했는데이 두 가지 해결책 중 어느 것도 작동하지 않습니다. 유일한 해결책은'command'를 사용하는 것입니다. 나는 또한 Anabilities Github 문제에 언급 된 것처럼'멈추고'시작했다. 어쨌든, 지금 당장은 첫 번째 해결책을 유지할 것입니다. 당신이 말했듯이, nginx 지원되지 않을 수 있습니다. 감사. – jean553