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

标签 php mysql bash docker docker-compose

我正在关注来自 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: 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

关于php - 从一个容器到另一个容器访问服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963113/

相关文章:

PHP MySQL 搜索脚本 - 只匹配某些字母

mysql - 注释代码: 1973 Can't create user 'user' @'localhost' ; it already exists, Mysql

mysql - 从 MySQL 日期时间字段中选择,其中年份不重要

linux - 如何在 Bash 中逐行打印时对数据进行排序

bash - 提取值并读取为变量

php - 是否有必要将方法定义为 "public"?

php - 除 WooCommerce 中的特定产品外,最低购物车金额

php - 从数据库表中选择特定字段

bash - Jenkins 并推出带有扩展的 Safari

php - Laravel 5 使用语句