【问题标题】:Docker: Expose running container to host [duplicate]Docker:将正在运行的容器公开给主机[重复]
【发布时间】:2021-02-03 01:20:21
【问题描述】:

我有一个正在运行的 MySQL 容器,我在其中导入了大量数据(花了我几个小时)。

现在我想在我的主机上使用一个 GUI 应用程序 (DBeaver) 从这个容器中查询数据。有没有办法可以将正在运行的容器的网络公开给主机,以便我可以连接到它?

我一直在环顾四周,到目前为止,最有希望的选择是运行 docker run 一个带有 -p 标签 3306:3306 的新容器,但是当我这样做时,所有导入的数据都消失了。

谢谢!

【问题讨论】:

    标签: mysql docker


    【解决方案1】:

    我找到了答案。哦,顺便说一句,我不知道为什么这个问题被否决了,这是一个完全合法的问题(该死......)

    1. 找到容器的IDdocker ps
    2. 获取该 ID,运行 docker inspect -f '{{ .Mounts }}' <container-id>
    3. 从结果中,我知道那个容器的体积位于这里:/var/lib/docker/volumes/simple_wiki_container_devcontainer_my-datavolume/_data
    4. docker run -p 3306:3306 --name new_mysql_with_data -e MYSQL_ROOT_PASSWORD=a_strong_password -v /var/lib/docker/volumes/simple_wiki_container_devcontainer_my-datavolume/_data:/var/lib/mysql -d mysql:lateset

    现在我可以在端口3306 上连接主机0.0.0.0 上的mysql-client

    【讨论】:

      【解决方案2】:

      从正在运行的容器创建一个新的 mysql 镜像并使用暴露的端口运行新镜像。您可以使用docker commit 来做到这一点。使用暴露的端口运行新图像,您的数据将被保存。使用

       docker commit <CONTAINER_ID> mysql-with-data:latest
      

      在提交完成之前不要停止运行容器——

      【讨论】:

      • 谢谢!上面命令中暴露端口3306 的部分在哪里?
      • 我试过这个。但是数据不存在...
      • docker commit 几乎从来都不是最佳实践,我不会在这里推荐它。值得注意的是,标准 Docker Hub 数据库映像的构建方式是提交映像永远不会保留其数据(即使您没有包含 docker run -v 选项,它也始终在卷中,并且卷永远不会提交)。
      猜你喜欢
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多