Как я могу остановить контейнер докеров MySQL, который заполняет том после завершения инициализации базы данных?

У меня есть файл docker-compose.yml со следующим:

 populated_db:
        container_name: populated_db
        restart: always
        image: mysql
        volumes:
            - ./test_database.sql:/docker-entrypoint-initdb.d/a.sql
            - populated_test_db:/var/lib/mysql
        ports:
            - "33061:3306"
        environment:
            MYSQL_RANDOM_ROOT_PASSWORD: "true"
            MYSQL_DATABASE: aaaa
            MYSQL_USER: aaaa
            MYSQL_PASSWORD: aaaa
db:
    container_name: db
    image: mysql
    ports:
        - "33060:3306"
    volumes:
        - type: volume
          source: populated_test_db
          target: /var/lib/mysql
          volume:
            nocopy: false
    restart: always
    environment:
        MYSQL_RANDOM_ROOT_PASSWORD: "true"
        MYSQL_DATABASE: aaaa
        MYSQL_USER: aaaa
        MYSQL_PASSWORD: aaaa
    depends_on:
        - populated_db

volumes:
    populated_test_db:

Контейнер populated_db успешно запускается и заполняет базу данных содержимым test_database.sql. Однако после этого контейнер db запускается и пытается использовать populated_test_db как свой / var / lib / mysql, вызывая следующую ошибку:

Unable to lock ./ibdata1 error: 11
Check that you do not already have another mysqld process using the same InnoDB data or log files.

Предположительно это связано с тем, что контейнер populated_db все еще работает. Как я могу остановить его работу после заполнения тома, чтобы контейнер db мог использовать заполненный том?

Это может помочь stackoverflow.com/questions/29145370/…

ThatGuyInIT 01.10.2018 01:19

@ThatGuyInIT, который объясняет, как заполнить контейнер Docker MySQL, но я уже могу это сделать.

Birdie 01.10.2018 01:39

Вы можете добавить в свой скрипт заполнения выход, который остановит заполнение контейнера; однако вам, вероятно, также потребуется проверить файл pid из другого контейнера, прежде чем пытаться запустить MySQL, поскольку оба контейнера будут запускаться одновременно. Кажется, что у меня много кладжа, и каждый раз, когда я сталкиваюсь с большим количеством кладжа, чтобы заставить что-то работать, я обычно второй раз смотрю на свой подход и смотрю, может быть, что-то мне не хватает.

ThatGuyInIT 01.10.2018 02:07

Как насчет этого? Он заполняет mysql во время сборки контейнера. github.com/lindycoder/prepopulated-mysql-container-example

ThatGuyInIT 01.10.2018 03:01

@ThatGuyInIT, который выглядит именно так, как я искал, спасибо!

Birdie 01.10.2018 03:04
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
326
0

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