下面是我的docker-compose文件,它运行良好,我想使用Vagrant重现相同的结果:
version: '3.7'
services:
db:
image: mysql:5.7.36
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
ports:
- "3308:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
environment:
PMA_HOST: db
PMA_USER: root
PMA_PASSWORD: root
ports:
- "8080:80"
执行docker-compose up
并访问localhost:8080 phpmyadmin
工作正常。当我尝试与vagrant
相同时,容器被构建并运行,但phpmyadmin
无法与mysql
容器通信。以下是我的Vagrantfile
:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "mysql" do |db|
db.vm.network "forwarded_port", guest: 3306, host: 3308
db.vm.hostname = "mysqldb"
db.vm.provider "docker" do |d|
d.image = "mysql:5.7.36"
d.env = {
:MYSQL_ROOT_PASSWORD => "root",
:MYSQL_DATBASE => "test_db"
}
d.remains_running = "true"
end
end
config.vm.define "phpmyadmin" do |pa|
pa.vm.network "forwarded_port", guest: 80, host: 8080
pa.vm.hostname = "phpmyadmin"
pa.vm.provider "docker" do |d|
d.image = "phpmyadmin/phpmyadmin:latest"
d.env = {
:PMA_HOST => "mysqldb",
:PMA_USER => "root",
:PMA_PASSWORD => "root"
}
d.remains_running = "true"
end
end
end
如何让phpmyadmin
和MySQL
与vagrant
一起工作?
1条答案
按热度按时间xytpbqjk1#
我有办法了。我需要在顶层定义网络。
我还需要解决另一个问题--如何定义虚拟机之间的依赖关系。只有在
mysql
启动并运行后才能构建虚拟机phpmyadmin
。与
docker-compose
不同的是,不能在vagrant
中设置直接依赖关系。但是可以通过设置选项--no-parallel
(例如:-vagrant up --no-parallel
)来进行顺序构建。即使
docker-compose
设置了依赖关系,依赖关系也只是在等待依赖容器构建的程度上,而不是在等待容器中的服务启动和运行。因此,即使在
vagrant
中按顺序构建之后,依赖的服务也无法连接。这与vagrant
或docker-compose
无关。容器中的服务需要等待其依赖的服务启动。因此,我在定时循环中的依赖容器中添加了一个延迟,依赖服务将尝试连接,失败后将等待30秒再次连接,尝试10次后它将放弃。