无法更改在Docker中运行的数据库

时间:2020-08-07 07:04:48

标签: docker mariadb

我无法从容器外部更改数据库。

我正在使用api和此主体创建的docker容器中运行mariaDB。

{
"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"}]
        }
    }
    
}

我可以使用以下方法进入数据库:

sudo mysql -h 172.17.0.6 -u root -p

但是我所做的所有更改都不是持久的(创建用户,赋予特权,从转储中还原数据库等)。

尽管我可以从容器内部对DB进行更改,例如:

docker exec -it nameOFContainer bash

我想知道为什么我的容器会这种行为,并且有什么方法可以改变行为吗?

2 个答案:

答案 0 :(得分:3)

您必须做两件事:

  1. 您已经将主机端口3309映射到了容器的端口3306。因此,在连接到数据库时,请使用该端口作为主机。

例如:

mysql -u root -h 127.0.0.1 -P3309 -p
  1. 要使数据库更改继续存在,请使用 docker卷。像这样:
-v $HOME/docker/volumes/mysql:/var/lib/mysql 

主机中的 $ HOME / docker / volumes / mysql 目录映射到Docker容器的 / var / lib / mysql 目录(这是数据库所在的位置)从中获取必要的文件。

答案 1 :(得分:0)

您需要定义一个卷以保留MariaDB数据。您可以在docker run上使用-v选项。我想这也可以在API中实现。

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

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