Ecco uno schema del codice che ho utilizzato per eseguire condizionatamente una delle diverse (ri) iniziare azioni di tipo per un contenitore docker. Potrebbe essere adattato per la situazione di (ri) avvio del servizio nel caso in cui il consiglio di riavvio sempre da @ giannis-nohj non funzioni per qualche motivo.
my_file = file ...
my_image = docker_image 'my-image' do
repo 'my-image'
action :pull
end
ruby_block 'compute docker action' do
block do
action = if my_image.updated_by_last_action?
:redeploy
elsif my_file.updated_by_last_action?
:restart
else
:run
end
resources('docker_container[my-container]').delayed_action(action)
end
end
docker_container 'my-container' do
repo 'my-image'
action :nothing
end
In genere la funzione "restart" degli script di avvio, quando si utilizza "restart" come azione, interrompe prima il servizio e quindi lo avvia. Se non è in esecuzione, lo avvierà. Quindi ti suggerisco di controllare lo script di avvio e utilizzare l'azione "riavvia" nello chef ... –
Il riavvio, purtroppo, causa un errore. Non è felice che il servizio non sia in esecuzione. – Jake
Beh, una cosa che puoi fare è aggiustare lo script di avvio affinché funzioni come preferisci, e usare la risorsa cookbook_file (o template) dello chef per sostituire prima lo script di avvio originale con lo script di avvio e quindi eseguire la risorsa che riavvia Postgresql OPPURE , poiché la risorsa non riesce a riavviarsi, aggiungere un nuovo tentativo (http://docs.opscode.com/chef/resources.html). –