Docker mysql - запустить команду обновления / скрипт при запуске образа - PullRequest
0 голосов
/ 07 июня 2018

Я хочу создать образ докера с инициализированной базой данных.Эти исходные данные будут содержать значение ссылки клиента по умолчанию 'XXX'.

Вот мой Dockerfile:

FROM mysql/mysql-server:5.7
COPY data.sql /docker-entrypoint-initdb.d/

При запуске контейнера этого изображения мне нужно заменить значение ref наконкретное значение пользователя 'ABCD', которое будет получено из переменной окружения, установленной файлом компоновки Docker.

Таким образом, запрос на обновление, который нужно запустить, выглядит примерно так:

update client set ref='ABCD' where ref='XXX'

Как сделатьЯ получаю Dockerfile, чтобы сделать это?Я не думаю, что это может быть команда RUN, поскольку я не хочу, чтобы обновление было частью сборки образа, а частью запуска образа (хорошо, если оно запускается при каждом запуске).

У меня есть все обычные переменные mysql env (MYSQL_ROOT_PASSWORD / MYSQL_ROOT_HOST / MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD) и надеюсь обратиться к другой env var для установки нужного ref.Желая увидеть, что это можно сделать как в виде необработанных команд, так и в виде сценария.

1 Ответ

0 голосов
/ 07 июня 2018

Вы правы. Все, что вы хотите сохранить, должно быть в разделе Dockerfile или build: вашего файла docker-compose.

Поскольку вы хотите, чтобы обновление было только вdocker run или docker-compose up фаза, вы можете использовать CMD или ENTRYPOINT для ее выполнения.Есть несколько способов, но позвольте мне порекомендовать следующий:

docker-compose.yml

version: '3'

services:
  your-service:
    env_file: ./your-mysql-env-file.env
    image: mysql/mysql-server:5.7
    volumes:
      - ./data.sql:/docker-entrypoint-initdb.d/data.sql
      - ./your-init-sql-commands.sql:/docker-entrypoint-initdb.d/your-init-sql-commands.sql
    container_name: your-container-name
    command:
      - /bin/bash
      - -c
      - |
          /etc/init.d/mysqld start
          mysql -u ${MYSQL_USER} -p ${MYSQL_PASSWORD} -h ${MYSQL_ROOT_HOST} ${MYSQL_DATABASE} < your-init-sql-commands.sql
          [other commands if needed...]
  • Обратите внимание, что ваш update client set ref='ABCD' where ref='XXX' должно быть определено внутри your-init-sql-commands.sql.Поэтому, если вы хотите изменить обновления, вам не нужно будет перестраивать образ.

  • your-mysql-env-file.env просто определите внутри него свои переменные MYSQL env, если вам нужноих внутри.

  • Обратите внимание, что я изменил ваш dockerfile в секции image: и COPY в volumes: в docker-compose.yml, но все эти шаги можно также выполнить с помощью Dockerfile и docker run.
  • Если вам не нужна множественная команда, просто измените все строки на одну.

Надеюсь, это может быть полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...