【问题标题】:Access a service from one container to other从一个容器访问服务到另一个容器
【发布时间】:2017-01-31 16:54:01
【问题描述】:

我正在关注here 的 docker Web 应用程序设置教程。如docker-compose.yml 文件中所述,MySQL 容器链接到应用程序,可通过index.phpphpMyAdmin 访问。目前没问题。

当我使用docker exec -it container-id bash 为我的应用程序打开一个交互式shell 并尝试访问MySQL 服务但我不能。我在这里错过了什么?

Edit1:当我输入MySQL,我得到bash: mysql: command not found

Edit2:docker ps的输出

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                  NAMES
1643f0ba5637        dockertutorial_php      "docker-php-entryp..."   9 seconds ago       Up 6 seconds        9000/tcp               dockertutorial_php_1
610f2c8bf4c4        phpmyadmin/phpmyadmin   "/run.sh phpmyadmin"     9 seconds ago       Up 6 seconds        0.0.0.0:8080->80/tcp   dockertutorial_phpmyadmin_1
29c552da473b        mysql:latest            "docker-entrypoint..."   10 seconds ago      Up 8 seconds        3306/tcp               dockertutorial_mysql_1

Edit3:也许我应该从这个开始。对于所有造成/可能造成的混乱,我深表歉意(特别是对@Jay Blanchard 和@mkasberg)。我想在创建 MySQL 数据库的 nginx 容器中运行一个 bash 脚本。如果我在 nginx 容器中安装了 MySQL,它可以工作,但如果它是一个单独的容器,则不能。用目前的方法可以实现吗?如果不是,我该如何纠正?

【问题讨论】:

  • 您有任何错误吗?容器是否将 mysql 服务器作为其主机文件中的条目?你能从链接的容器ping mysql 容器吗? mysql服务器是否设置为允许其他机器访问?
  • mysql -u *name* -p?
  • 您是如何尝试访问它的?遇到了什么问题?
  • 你能添加docker ps -a的输出吗?您可能还想尝试容器的名称,而不是 ID

标签: php mysql bash docker docker-compose


【解决方案1】:

mysql: command not found 表示 mysql 客户端二进制文件在您登录的任何容器中都不可用。我怀疑您在 MySQL 以外的容器上运行 docker exec。二进制文件将在 MySQL 容器中。虽然其他容器可以连接 MySQL,但它们提供 MySQL 命令行应用程序(以保持图像大小较小)。

确保您使用docker exec 命令连接到 MySQL 容器,它应该可以工作。事实上,docker-compose 为您提供了一种方法来执行此操作。随着您的服务运行(在执行docker-compose up 之后),试试这个:

$ docker-compose exec mysql /bin/bash

这应该会让您进入 mysql 容器中的 bash 提示符。之前,您会在 nginx 容器中进入 bash 提示符。哪个不能在命令行上运行mysql

【讨论】:

  • docker-compose.yml 链接到 php 容器,后者又链接到 MySQL 容器。我还可以通过index.php 访问 MySQL。你能帮我澄清一下吗?
  • 我编辑了答案以显示您需要的 docker-compose 命令。如果你想像mysql -u root -p -h localhost这样连接到mysql,你需要在mysql容器中运行bash。
  • 虽然您可以通过 index.php 从 nginx 容器访问 MySQL,但这与在 nginx 容器内运行 mysql 客户端不同。 nginx 容器只能通过 PHP(或其他已安装的应用程序)连接到 MySQL。它没有安装mysql 命令行应用程序。
  • 您能根据我的最新更新更新您的代码吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-12
  • 2019-11-02
  • 1970-01-01
  • 2019-06-13
  • 2020-07-26
  • 2021-03-04
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多