Php 如何在docker上运行3层应用程序,使用vagrant在3个不同的centos上运行,

Php 如何在docker上运行3层应用程序,使用vagrant在3个不同的centos上运行,,php,mysql,docker,vagrant,Php,Mysql,Docker,Vagrant,我在Vagrant上工作,试图创建3层Web应用程序,我在Vagrant上使用相同的Vagrant文件安装了3个Centos 每个Centos都有docker,1个Centos有数据库,2个Centos有php apache服务器,3个Centos有php apache和客户端代码来显示结果 这三个都是同步的,工作正常,但当我为第一个MYSQL数据库创建docker容器时,我能够在同一个Vm上本地连接它,但无法通过第二个Vm与apache和PHP连接 有人能帮我吗? 我还必须在Docker co

我在Vagrant上工作,试图创建3层Web应用程序,我在Vagrant上使用相同的Vagrant文件安装了3个Centos

每个Centos都有docker,1个Centos有数据库,2个Centos有php apache服务器,3个Centos有php apache和客户端代码来显示结果

这三个都是同步的,工作正常,但当我为第一个MYSQL数据库创建docker容器时,我能够在同一个Vm上本地连接它,但无法通过第二个Vm与apache和PHP连接

有人能帮我吗?

我还必须在Docker compose上测试这个3层web应用程序

我怎么做?
我必须在不同的虚拟机上运行所有3个吗?

在这个配置中,正如您所描述的,大多数配置与您在没有Docker的情况下设置的配置相同。(这没什么错!)确保:

  • 对于每个集装箱化服务,使用
    -p
    选项运行它,以在Docker空间外发布一些端口;例如,您使用docker run-p3306:3306运行的MySQL服务。。。mysql:5.7

  • 要在服务之间连接,请连接到承载服务的VM的IP地址和发布的端口号(
    -p
    选项后的第一个数字)。(像这样的服务发现系统可以帮助记住哪个服务位于哪个VM上。)

您不能将Docker Compose用于此设置,除此之外,它可能是记录每个服务的启动选项的更方便的方法


如果使用Docker Compose或其他Docker本机工具对您很重要,那么您最多只能在一个VM上运行此工具。(如果你有一台Linux主机,你根本不需要虚拟机;MacOS和一些Windows设置有桌面应用程序,可以很好地隐藏虚拟机。)由于Docker容器与虚拟机有一些相似之处(像一个孤立的文件系统),更多的面向开发人员的设置倾向于完全避免虚拟机,而且似乎不经常涉及流浪者。您在这里描述的是一个非常好的部署体系结构,但它是您用一个Packer/Ansible堆栈和Docker作为实现细节设置的,而不是Docker优先的东西。

这是我的任务,我也使用了这个命令docker run-d-p 3306:3306--name dmysql-e MYSQL\u ROOT\u HOST=%MYSQL\u ROOT\u PASSWORD=vagrant my MYSQL这里my MYSQL是我的MYSQL服务器的映像,它使用数据库和表脚本构建,我可以在同一个centos上访问容器中的表,但无法从第二个centos远程连接到它,直到我无法连接到数据库,我尝试了两个ip地址,192.168.10.87这是centos ip我无法使用它连接到mariadb,但172.17.0.2这是mysql服务器的docker ip地址,这两个ip地址都不能将我连接到mysql docker Container
docker inspect
ip地址通常是无用的,您可能永远都不应该查找它们。在您的示例中,一个虚拟机无法访问另一个虚拟机上的Docker内部IP地址(甚至可能对自己的容器使用相同的IP地址)。好的,David Maze,我甚至无法ping该Docker IP地址,因此我知道它不起作用。