如何将Linux套接字文件从Docker容器(MySQL,MariaDB等)公开给主机

扭力

免责声明:我不是在寻找一种将MySQL / MariaDB配置为使用TCP连接的方法。我知道这种选择,问题不在于那方面。

我在将套接字文件从容器内部绑定到主机文件系统时遇到麻烦。我期望像这样的简单docker-compose条目可以工作:

    volumes:
      - /srv/docker/sockets/mariadb.container.sock:/var/run/mysqld/mysqld.sock

但这是行不通的。相反,我遇到了以下错误消息:

its_sql_dev    | 190305 10:31:23 [ERROR] Can't start server : Bind on unix socket: Address already in use
its_sql_dev    | 190305 10:31:23 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?

主机系统中文件的状态似乎无关紧要-它是否已存在,是否具有a+rwx权限,是否存在正确的用户或根本不存在,似乎对容器是否启动没有任何影响。

也许最令人困惑的是主机文件系统的最终结果:

[user@server mariadb]# ls -alsh /srv/docker/shared/
total 16K
4.0K drwxrwxrwx 4 root    root     4.0K Mar  5 11:31 .
4.0K drwxr-xr-x 7 root    root     4.0K Mar  1 13:09 ..
4.0K drwxr-xr-x 2 root    root     4.0K Mar  5 11:31 mariadb.container.sock

原来,.sock文件变成了主机上的一个(空)目录!

将套接字文件移动到其自己的目录并将该目录安装到主机后,我还有一点运气。在这种情况下,该文件只能工作一次,但在容器重启后不会工作。

幼虫

问题是绑定安装用于将主机上的某些内容暴露给容器。因此,当您执行此操作时:

volumes:
  - /srv/docker/sockets/mariadb.container.sock:/var/run/mysqld/mysqld.sock

您正在试图安装/srv/docker/sockets/mariadb.container.sock-这不存在-在/var/run/mysqld/mysqld.sock容器内。由于源对象不存在,Docker将在该位置创建一个空目录并将其安装到容器中……这当然意味着mysqld在启动时无法创建套接字。

正确的解决方案是将主机目录挂载到/var/run/mysqld/,例如:

volumes:
  - /srv/docker/sockets/mariadb:/var/run/mysqld

然后在您的主机上,该套接字将变为/srv/docker/sockets/mariadb/mysqld.sock

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Docker:如何将主机文件夹与容器文件夹实时同步?

来自分类Dev

如何将C ++函数公开给lua脚本?

来自分类Dev

将Docker容器公开给公共IP

来自分类Dev

将基于模板的容器类公开给Qt脚本引擎?

来自分类Dev

如何将模型方法公开给Django-rest-framework

来自分类Dev

如何将C ++结构公开给Qml

来自分类Dev

如何将Docker容器中的目录挂载到主机?

来自分类Dev

使用boot2docker将docker容器应用程序端口公开给Windows主机

来自分类Dev

我可以仅将Docker端口公开给另一个Docker(而不是主机)吗?

来自分类Dev

如何将Docker容器中的目录挂载到主机?

来自分类Dev

如何从Windows主机获取文件到linux docker容器?

来自分类Dev

将文件从Docker容器暴露给主机

来自分类Dev

如何将函数从C ++可执行文件公开给LuaJIT

来自分类Dev

Docker仅将端口公开给localhost

来自分类Dev

如何将模块中的类公开给TypeScript中的全局名称空间?

来自分类Dev

如何将Docker容器公开到Web

来自分类Dev

如何将Docker容器与主机的localhost mysql数据库连接?

来自分类Dev

Docker:MySQL容器绑定主机mysqld套接字

来自分类Dev

如何将数据“ nc”到套接字文件?

来自分类Dev

React Component如何将数据公开给外部应用程序?

来自分类Dev

如何从Windows主机获取文件到linux docker容器?

来自分类Dev

Docker如何将卷从Docker Client挂载到在Docker主机上运行的Docker容器中?

来自分类Dev

如何将函数从C ++可执行文件公开给LuaJIT

来自分类Dev

如何将主机代码挂载到 docker 中的容器?

来自分类Dev

如何将文件从 Docker Ubuntu 容器复制到 Windows 主机

来自分类Dev

如何将文件从 docker 容器复制到我的主机?

来自分类Dev

如何将文件从主机复制到 Kubernetes 容器?

来自分类Dev

主机到 Docker 容器远程套接字失败

来自分类Dev

如何将 XSLT 2 样式表模块中定义的函数公开给 fn:transform?

Related 相关文章

  1. 1

    Docker:如何将主机文件夹与容器文件夹实时同步?

  2. 2

    如何将C ++函数公开给lua脚本?

  3. 3

    将Docker容器公开给公共IP

  4. 4

    将基于模板的容器类公开给Qt脚本引擎?

  5. 5

    如何将模型方法公开给Django-rest-framework

  6. 6

    如何将C ++结构公开给Qml

  7. 7

    如何将Docker容器中的目录挂载到主机?

  8. 8

    使用boot2docker将docker容器应用程序端口公开给Windows主机

  9. 9

    我可以仅将Docker端口公开给另一个Docker(而不是主机)吗?

  10. 10

    如何将Docker容器中的目录挂载到主机?

  11. 11

    如何从Windows主机获取文件到linux docker容器?

  12. 12

    将文件从Docker容器暴露给主机

  13. 13

    如何将函数从C ++可执行文件公开给LuaJIT

  14. 14

    Docker仅将端口公开给localhost

  15. 15

    如何将模块中的类公开给TypeScript中的全局名称空间?

  16. 16

    如何将Docker容器公开到Web

  17. 17

    如何将Docker容器与主机的localhost mysql数据库连接?

  18. 18

    Docker:MySQL容器绑定主机mysqld套接字

  19. 19

    如何将数据“ nc”到套接字文件?

  20. 20

    React Component如何将数据公开给外部应用程序?

  21. 21

    如何从Windows主机获取文件到linux docker容器?

  22. 22

    Docker如何将卷从Docker Client挂载到在Docker主机上运行的Docker容器中?

  23. 23

    如何将函数从C ++可执行文件公开给LuaJIT

  24. 24

    如何将主机代码挂载到 docker 中的容器?

  25. 25

    如何将文件从 Docker Ubuntu 容器复制到 Windows 主机

  26. 26

    如何将文件从 docker 容器复制到我的主机?

  27. 27

    如何将文件从主机复制到 Kubernetes 容器?

  28. 28

    主机到 Docker 容器远程套接字失败

  29. 29

    如何将 XSLT 2 样式表模块中定义的函数公开给 fn:transform?

热门标签

归档