【问题标题】:MySql docker container, via terminal works, via docker-compose noMySql docker 容器,通过终端工作,通过 docker-compose no
【发布时间】:2019-12-03 14:12:21
【问题描述】:

以下文件是一个 docker-compose 文件。如果我通过 docker-compose up 执行它,则容器会自行创建,但无法通过终端连接到服务器,就像通过数据库可视化编辑器一样。而且,如果我通过终端通过 docker inspect 检查容器,一些值(即 IP 地址)是空的。

如果我尝试通过 docker run 命令手动创建相同的容器,通过命令行传递相同的参数,一切正常,如果我通过终端检查容器,所有值都是正确的(另外,特别是,IP 地址),我可以通过终端连接到数据库,就像通过 db 可视化编辑器一样。

为什么会发生,为什么特别是通过这个 docker-compose 文件创建 mySql 容器时,ipaddress 似乎是空的?我的 docker compose 文件不正确吗?我检查了几次

version: '3.6'
services:
  mysql:
    image: mysql:5.7
    restart: unless-stopped
    environment:
    - MYSQL_ROOT_PASSWORD=xyz
    ports:
    - 127.0.0.1:port_number:port_number
    volumes:
    - mysql:/var/lib/mysql
    - ./mysql-init:/docker-entrypoint-initdb.d
    command:
    - --max-allowed-packet=64M

volumes:
  mysql: {}

编辑:回复 2 个用户,

1) Port_number 在原始文件中正好是 3306; 2)完整的运行命令是

sudo docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=my_password -p 3306:3306 mysql:5.7

【问题讨论】:

  • 请包含您使用的完整的docker run 命令。
  • 只需添加ports: 3306:3306
  • 我通过编辑我的原始问题回复了两位用户。非常感谢!
  • Compose 容器是否真正启动了;有几个选项不同? docker inspect 输出是非常低级的调试信息,通常没有用处,尤其是它报告的 IP 地址在许多极其常见的上下文中不起作用。
  • 非常感谢大卫;检查不是基本的,只是向您报告附加信息。主要问题是,通过 docker compose 它不起作用,而通过命令行它可以正常工作。你有什么想法吗?

标签: mysql docker docker-compose


【解决方案1】:

我的猜测是问题在于您正在侦听 IP 127.0.0.1,该 IP 位于容器本地,因此无法远程访问。你应该在 0.0.0.0 上收听。

长版:https://pythonspeed.com/articles/docker-connection-refused/

【讨论】:

  • 股票mysql 图像正确绑定到0.0.0.0;您不需要为此进行特殊配置。
  • 你的理论是正确的,但我不认为是解决方案。其他情况下,怎么可能通过命令行创建相同的容器;通过 sudo docker inspect 测试这个容器;在终端中检查 IP 地址正好是 127.0.0.1 并通过 mysql 可视化编辑器 extern 测试这个与容器的连接是否正常?非常感谢everycase的回复,你还有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多