Невозможно изменить базу данных, работающую в docker - PullRequest
0 голосов
/ 07 августа 2020

Я не могу изменить базу данных вне контейнера.

Я запускаю mariaDB в docker контейнере, который был создан с использованием api и этого тела.

{
"Image": "mariadb/server:10.4",
"env": ["MYSQL_ROOT_PASSWORD=pass",
             "MYSQL_DATABASE=test",
             "MYSQL_USER=user1",
             "MYSQL_PASSWORD=pass"],
    "HostConfig": {
        "PortBindings": {
            "3306/tcp": [{"HostPort": "3309"}]
        }
    }
    
}

Я могу войти в db, используя:

sudo mysql -h 172.17.0.6 -u root -p

, но все изменения, которые я делаю, не являются постоянными (создание пользователей, предоставление привилегий, восстановление базы данных из дампа и т. д. c.).

Хотя я могу внести изменения в БД из внутреннего контейнера, например:

docker exec -it nameOFContainer bash

Я хотел бы знать, почему мой контейнер ведет себя таким образом и есть ли способ изменить поведение?

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Есть 2 вещи, которые вам нужно сделать:

  1. Вы уже сопоставили порт хоста 3309 с портом 3306 контейнера. Поэтому при подключении к БД используйте этот порт в качестве хоста.

Например:

mysql -u root -h 127.0.0.1 -P3309 -p
Чтобы изменения базы данных сохранялись, используйте docker тома . Примерно так:
-v $HOME/docker/volumes/mysql:/var/lib/mysql 

Каталог $ HOME / docker / volume / mysql на вашем хосте сопоставлен с / var / lib / mysql каталог вашего docker контейнера (отсюда ваша база данных получает необходимые файлы).

0 голосов
/ 07 августа 2020

Вам необходимо определить том для сохранения данных MariaDB. Вы можете использовать опцию -v для docker run. Полагаю, это возможно и в API.

-v /my/own/datadir:/var/lib/mysql

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

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