从一个容器访问服务到另一个容器

时间:2017-01-31 16:54:01

标签: php mysql bash docker docker-compose

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

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

修改1:当我输入MySQL时,我得到bash: mysql: command not found

编辑2: 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

编辑3:也许我应该从这开始。我为造成/将导致的所有混乱道歉(特别是对@Jay Blanchard& @mkasberg)。我想在nginx容器中运行一个bash脚本,它创建一个MySQL数据库。如果我在nginx容器中安装了MySQL,但是如果它是一个单独的容器则不行。是否有可能用现有方法实现?如果不是我应该如何纠正它?

1 个答案:

答案 0 :(得分: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