如何执行mariadb的图像?

时间:2018-04-13 17:47:20

标签: mysql docker mariadb

前几天我看到自己处于必须在我的电脑上安装mariadb已经拥有mysql的阶段,我设法让这两个实例都归功于docker。我按照这个publication设法安装了docker和一个图像。

docker run --name mariadb-10.2.10-container -e MYSQL_ROOT_PASSWORD=somepassword -p 127.0.0.1:3311:3306 -d mariadb:10.2.10

电脑没有关闭,直到它今天突然发出错误并且有必要重新启动它。

因为我现在没有使用docker的任何经验,所以我尝试启动容器,但我没有实现它。

我分享我的尝试

docker images返回此

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.5                 0da48351c371        4 weeks ago         205MB
mariadb             10.2.10             abcee1d29aac        4 months ago        396MB

当我尝试

docker run -e MYSQL_ROOT_PASSWORD=somepassword -p 127.0.0.1:3311:3306 -d mariadb:10.2.10

在此之后我希望通过3311端口连接到Mariadb,所以我在事件发生之前就开始了我的应用程序。现在容器正在运行,但他似乎没有在3311端口监听,因为我无法从应用程序或MySQL客户端连接。

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
48041cc27494        mariadb:10.2.10     "docker-entrypoint.s…"   7 minutes ago       Up 7 minutes        127.0.0.1:3311->3306/tcp   heuristic_shaw

现在我设法连接,我发现问题是数据库不存在

我丢失了我的数据库?如果是这样,有没有办法恢复它?我做错了什么?

通过SO用户建议我显示执行命令docker ps -a | grep mariadb

的结果
48041cc27494        mariadb:10.2.10     "docker-entrypoint.s…"   About an hour ago   Up About an hour               127.0.0.1:3311->3306/tcp   heuristic_shaw
3af4187383a9        mariadb:10.2.10     "docker-entrypoint.s…"   About an hour ago   Exited (1) About an hour ago                              amazing_stonebraker
f1873e7b117c        mariadb:10.2.10     "docker-entrypoint.s…"   About an hour ago   Exited (1) About an hour ago                              confident_mayer
7d1d1fc27cf0        mariadb:10.2.10     "docker-entrypoint.s…"   About an hour ago   Exited (0) About an hour ago                              admiring_mendeleev
0a828a6ad5f4        mariadb:10.2.10     "docker-entrypoint.s…"   About an hour ago   Exited (1) About an hour ago                              tender_yonath
4802f926ef5d        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    wizardly_mcnulty
673898d10840        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    elated_banach
d444e40e5ccc        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (0) 2 hours ago                                    elated_cori
49fa7950e262        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (0) 2 hours ago                                    gifted_engelbart
987d5e8c80db        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    festive_boyd
6b30e16a91bf        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    wizardly_edison
3aea221c1477        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (0) 2 hours ago                                    inspiring_mcnulty
5e95beb0b4d4        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    sad_hoover
21f9df586582        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    goofy_archimedes
93b6c5db2178        mariadb:10.2.10     "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                                    sad_fermi
0fba8554b87f        mariadb:10.2.10     "docker-entrypoint.s…"   4 days ago          Exited (255) 2 hours ago       127.0.0.1:3311->3306/tcp   mariadb-10.2.10-container

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

docker run每次都会创建一个新容器。

所以,当你试图通过运行这个来恢复旧容器时, docker run -e MYSQL_ROOT_PASSWORD=somepassword -p 127.0.0.1:3311:3306 -d mariadb:10.2.10

它实际上是在创建一个新容器。

所以,你的工作是:

  1. 确保前一个容器名称为mariadb-10.2.10-container(因为您在第一个命令中将容器命名为此容器)。
  2. 如果您看到docker ps -a | grep mariadb输出的最后一行,那就是我们正在寻找的古代容器!

    1. 现在,我们必须重新启动它。但在此之前,我们需要停止容器48041cc27494,因为它正在监听127.0.0.1:3311。运行docker stop 48041cc27494。它应该成功停止。

    2. 现在启动ancient容器!您可以运行docker start 0fba8554b87fdocker start $(docker ps -a -q -f name=mariadb-10.2.10-container)。这两个命令中的任何一个都应该恢复容器。你应该有旧的数据。现在你可以像以前一样连接到它。

    3. 此外,您应该为此容器添加restart策略,以便每次停止时都不需要重新启动。