#docker #rabbitmq #dockerfile
#docker #rabbitmq #dockerfile
Вопрос:
Я создаю брокер RabbitMQ с помощью docker и использовал официальный образ docker (rabbitmq: 3) в моем Dockerfile.
Мне нужно запустить скрипт (setup.sh ) для настройки пользователей и администраторов для брокера.
Когда я выполняю Dockerfile,
FROM rabbitmq:3
COPY provision /usr/src/provision
WORKDIR /usr/src/provision
EXPOSE 15672
EXPOSE 5672
EXPOSE 4369
RUN ./setup.sh
Я получаю :
Error: unable to perform an operation on node 'rabbit@db52ce2c88d9'. Please see diagnostics information and suggestions below.
Most common reasons for this are:
* Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)
* CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)
* Target node is not running
In addition to the diagnostics info below:
* See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more
* Consult server logs on node rabbit@db52ce2c88d9
* If target node is configured to use long node names, don't forget to use --longnames with CLI tools
DIAGNOSTICS
===========
attempted to contact: [rabbit@db52ce2c88d9]
rabbit@db52ce2c88d9:
* connected to epmd (port 4369) on db52ce2c88d9
* epmd reports: node 'rabbit' not running at all
no other nodes on db52ce2c88d9
* suggestion: start the node
Current node details:
* node name: 'rabbitmqcli-4810-rabbit@db52ce2c88d9'
* effective user's home directory: /var/lib/rabbitmq
* Erlang cookie hash: tql1bCPiwbtLGtuDAB3tOQ==
---------------------------------------------------------------------------
Removing intermediate container db52ce2c88d9
---> 79851f024ae3
Successfully built 79851f024ae3
Successfully tagged rmq_v0:latest
Как я могу выполнить файл ПОСЛЕ удаления промежуточного контейнера, но также не docker exec
команды, он должен быть автоматизирован.
Спасибо 🙂
Ответ №1:
Вы пытаетесь отправлять команды в службу, не инициируя ее до этого. Я предлагаю не добавлять данные в само изображение, а после его инициализации. В зависимости от того, где будут выполняться эти изображения (обычный Docker, Docker Swarm, Kubernetes и т. Д.), Вы можете добавить исходные данные во время процесса прогрева (перед инициализацией). В зависимости от времени, затраченного на это действие, и потребностей в масштабировании (а также изменчивости этих данных и инфраструктуры, в которой все это будет выполняться), на этом шаге можно внести некоторые улучшения в производительность, например, клонировать том с уже примененными двоичными данными перед запуском нового экземпляра.
Комментарии:
1. @Camille SAURY Если этот ответ не помог, пожалуйста, прокомментируйте, почему.