아래 시나리오가 있습니다. 3x Vagrant VM이 아래 Vagrantfile에서 회전되어 실행 중입니다(Oracle VirtualBox 내에서 볼 수 있음).
나는 docker1에 로그온했고 네트워크 유형은 "NAT"이며 포트 전달이 사용됩니다(Guest:8080, Host:8080).
localhost:8080 & 127.0.0.1:8080 & 127.0.1.1:8080에서 페이지에 액세스할 수 있습니다. 그러나 IP를 통해 액세스할 수 없습니다(192.168.99.101:8080은 "응답하는 데 너무 오래 걸려서 연결할 수 없습니다)."
Vagrant.configure("2") do |config|
config.vm.define "docker1" do |docker1|
docker1.vm.box="xxx/centos-stream-8"
docker1.vm.hostname = "docker1.do1.lab"
docker1.vm.network "private_network", ip: "192.168.99.101"
docker1.vm.provision "shell", path: "docker-setup.sh"
docker1.vm.provision "shell", path: "other-steps.sh"
docker1.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1536"]
end
end
config.vm.define "docker2" do |docker2|
docker2.vm.box="xxx/centos-stream-8"
docker2.vm.hostname = "docker2.do1.lab"
docker2.vm.network "private_network", ip: "192.168.99.102"
docker2.vm.provision "shell", path: "docker-setup.sh"
docker2.vm.provision "shell", path: "other-steps.sh"
docker2.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1536"]
end
end
config.vm.define "docker3" do |docker3|
docker3.vm.box="xxx/centos-stream-8"
docker3.vm.hostname = "docker3.do1.lab"
docker3.vm.network "private_network", ip: "192.168.99.103"
docker3.vm.provision "shell", path: "docker-setup.sh"
docker3.vm.provision "shell", path: "other-steps.sh"
docker3.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1536"]
end
end
end
docker-setup.sh 파일은 다음과 같습니다.
#!/bin/bash
echo "* Add Docker repository ..."
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
echo "* Install Docker ..."
dnf install -y docker-ce docker-ce-cli containerd.io
echo "* Enable and start Docker ..."
systemctl enable docker
systemctl start docker
echo "* Add vagrant user to docker group ..."
usermod -aG docker vagrant
other-steps.sh 파일은 다음과 같습니다.
#!/bin/bash
echo "* Add hosts ..."
echo "192.168.99.101 docker1.do1.lab docker1" >> /etc/hosts
echo "192.168.99.102 docker2.do1.lab docker2" >> /etc/hosts
echo "192.168.99.103 docker3.do1.lab docker3" >> /etc/hosts
echo "* Install Additional Packages ..."
dnf install -y jq tree git nano
echo "* Firewall - swarm - open ports ..."
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
echo "* Firewall - app - open port 8080 ..."
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
네트워크는 아래와 같습니다:
[vagrant@docker1 etc]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
f2351cd29061 bridge bridge local
f91a21d83931 docker_gwbridge bridge local
c5fc9aedf330 host host local
oc2i4c2czira ingress overlay swarm
50fe2b72573c none null local
etc/hosts 내용은 여기에 있습니다:
[vagrant@docker1 etc]$ cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.1.1 docker1.do1.lab docker1
192.168.99.101 docker1.do1.lab docker1
192.168.99.102 docker2.do1.lab docker2
192.168.99.103 docker3.do1.lab docker3
컨테이너를 스핀업하는 데 사용되는 명령은 다음과 같습니다.
docker container run -d --name web -p 8080:80 -e APP_MODE='test' swarm-app
동일한 문제가 있는 수많은 기사를 조사했지만 여전히 해결책을 찾을 수 없습니다. 이것이 문제의 IP 주소에 대한 DNS 확인과 관련이 있을 수 있다고 생각합니까?
업데이트: 아래 주소(포트 전달 호스트:8080, 게스트:80)를 컬을 통해 CMD에서 열 예정입니다. 제공할 정보가 있으면 알려주시기 바랍니다. `[vagrant@docker1 ~]$ 컬 http:/localhost:8080-> 브라우저에서 열리지 않습니다
안녕하세요 도커 스웜입니다!
테스트 모드로 실행 중입니다.제공자:be93b0268b1d
[vagrant@docker1 ~]$ 컬http://172.17.0.2:80 -> 컨테이너 IP입니다. 브라우저를 통해 열리지 않습니다.
안녕하세요 도커 스웜입니다!
테스트 모드로 실행 중입니다.제공자:be93b0268b1d
[vagrant@docker1 ~]$ 컬http://192.168.99.101:8080 -> 이것은 브라우저를 통해 열려야 하는 Docker 호스트 IP입니다. 성공하지 못했습니다.
안녕하세요 도커 스웜입니다!
테스트 모드로 실행 중입니다.제공자:be93b0268b1d`