Я пытаюсь эмулировать нашу микросервисную инфраструктуру с помощью Vagrant и Docker.У меня есть Vagrant VM, которая служит в качестве шлюза API.В Vagrantfile
я использовал настройку Docker для настройки Kong.Моя цель состоит в том, чтобы загрузить необходимые службы Kong при инициализации, используя cURL.
My Vagrantfile
:
Vagrant.configure("2") do |config|
config.vm.hostname = 'apigateway'
config.vm.box = "centos/7"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.110.110"
config.vm.synced_folder ".", "/vagrant"
config.vm.provision "docker" do |docker|
config.vm.provision "shell" do |sh|
docker.pull_images "postgres:9.6"
docker.pull_images "kong"
docker.run "postgres:9.6",
image: "postgres:9.6",
args: "--name kong-db --network='host' -p 5432:5432 -e 'POSTGRES_USER=kong' -e 'POSTGRES_DB=kong' -e 'POSTGRES_PASSWORD=kong'",
auto_assign_name: false
sh.inline = "firewall-cmd --permanent --add-port=5432/tcp"
sh.inline = "firewall-cmd --reload"
docker.run "kong-migrations",
image: "kong",
cmd: "kong migrations bootstrap",
args: "--name kong-migrations --network='host' -e 'KONG_DATABASE=postgres' -e 'KONG_PG_HOST=localhost' -e 'KONG_PG_USER=kong' -e 'KONG_PG_PASSWORD=kong' -e 'KONG_PG_DATABASE=kong'",
auto_assign_name: false,
restart: "on-failure"
docker.run "kong",
image: "kong",
args: "--name kong --network='host' -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 -e 'KONG_DATABASE=postgres' -e 'KONG_PG_HOST=localhost' -e 'KONG_PG_USER=kong' -e 'KONG_PG_PASSWORD=kong' -e 'KONG_PG_DATABASE=kong' -e 'KONG_ADMIN_LISTEN=127.0.0.1:8001, 127.0.0.1:8444 ssl'",
auto_assign_name: false
sh.inline = "firewall-cmd --permanent --add-port=8000/tcp"
sh.inline = "firewall-cmd --permanent --add-port=8001/tcp"
sh.inline = "firewall-cmd --permanent --add-port=8443/tcp"
sh.inline = "firewall-cmd --permanent --add-port=8444/tcp"
sh.inline = "firewall-cmd --reload"
###### The cURL shell scripts that raised the errors #######
sh.inline = "docker exec kong curl -i -X POST --url http://localhost:8001/services/ --data 'name=admin-api' --data 'url=http://localhost:8001'"
sh.inline = "docker exec kong curl -i -X POST --url http://localhost:8001/services/admin-api/routes --data 'path=/admin-api'"
sh.inline = "docker exec kong curl -i -X POST --url http://localhost:8001/services/admin-api/plugins --data 'name=jwt'"
####### --End of cURL scripts #####
end
end
end
Проблема заключается в том, что сценарии cURL выдают ошибку
default: curl: (7) Failed to connect to localhost port 8001: Connection refused
Однако операция будет успешной, когда я выполню сценарий cURL внутри виртуальной машины после vagrant ssh
, то есть
docker exec kong curl -i -X POST --url http://localhost:8001/services/ --data 'name=admin-api' --data 'url=http://localhost:8001'
Я пытался использовать виртуальный IP IP 192.168.110.110
вместо localhost
и я получаю Connection reset by peer
.
Что не так с этой настройкой?Что должно быть сделано?