Выполнить скрипт после сборки docker

#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 Если этот ответ не помог, пожалуйста, прокомментируйте, почему.