Ответ, на который вы ссылаетесь, верен в том смысле, что вы должны использовать stop_app
, а не stop
, как в вашем сообщении.
Между ними есть важное различие:
stop
:
... останавливает RabbitMQ и его среду выполнения (Erlang VM)
stop_app
:
... останавливает приложение RabbitMQ, оставляя запущенной среду выполнения (Erlang VM)
Поскольку в контейнере rabbitmq, содержащем Erlang VM, значение равно PID = 1
, его остановка, очевидно, приведет к остановке контейнера. К счастью, авторы rabbitmq добавили команду stop_app
специально для улучшения опыта пользователя, связанного с тестированием.
Код из ответа, на который вы ссылаетесь, должен работать просто отлично. Вот тот же код, что и в одной строке:
docker exec my_queue sh -c "rabbitmqctl stop_app; rabbitmqctl reset; rabbitmqctl start_app"
Вывод будет выглядеть так:
$ docker exec my_queue sh -c "rabbitmqctl stop_app; rabbitmqctl reset; rabbitmqctl start_app"
Stopping rabbit application on node rabbit@40420e95dcee
Resetting node rabbit@40420e95dcee
Starting node rabbit@40420e95dcee
$