我正在关注来自 here 的 docker web 应用程序设置教程.如 docker-compose.yml
文件中所述,MySQL
容器已链接到应用程序,可通过 index.php
和 phpMyAdmin
。到目前为止没问题。
当我使用 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/