Создание MySQL Docker контейнера, устанавливающего переменные env

Я использую spotify-docker-client для создания и запуска MySQL-контейнера для тестирования. Это прекрасно работает, но я с трудом пытаюсь найти, как установить определенные значения для подключения к базе данных, как MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, а также MYSQL_PASSWORD, Это мой код:

final ContainerConfig containerConfig = ContainerConfig.builder()
        .hostConfig(hostConfig)
        .image(image)
        .env("MYSQL_ROOT_PASSWORD","testrootpwd","MYSQL_DATABASE", "test", "MYSQL_USER", "test", "MYSQL_PASSWORD", "test")
        .build();

LOG.debug("Creating container for image: {}", image);
final ContainerCreation creation = this.docker.createContainer(containerConfig);

Я предполагаю что .env вызов для установки переменных среды. И согласно документации контейнера mysql, установка этих переменных env является способом сделать это:

https://hub.docker.com/_/mysql

Но все равно я не могу подключиться к контейнеру, я подключился к bash и вижу, что эти переменные env не установлены.

кто нибудь знает как это сделать?

Я мог бы создать dockerfile и создать свой собственный образ, но я не хочу этого делать, я хочу сделать это с помощью клиента spotify.

1 ответ

Решение

Этот клиент использует Docker API, поэтому, если у клиента нет документации, вы всегда можете проверить исходный API. Проверить CREATE A CONTAINER раздел в API Docker Engine.

Вы можете видеть, что есть пример запроса JSON с env поле:

"Env": [
           "FOO=bar",
           "BAZ=quux"
],

Так что я думаю, что вы можете сделать это в своем Java-коде:

final ContainerConfig containerConfig = ContainerConfig.builder()
    .hostConfig(hostConfig)
    .image(image)
    .env("MYSQL_ROOT_PASSWORD=testrootpwd", "MYSQL_DATABASE=test", ...)
    .build();

PS Также, пожалуйста, обратите внимание, что в документации говорится об этом параметре:

Список переменных среды для установки внутри контейнера в форме ["VAR=value", ...]. Переменная без = удаляется из среды, а не иметь пустое значение.

Может помочь вам избежать ошибок позже.

Другие вопросы по тегам