java -jar lib/kvstore.jar ping - ConnectException при использовании IP-адреса
Я создал виртуальную машину Oracle Linux (ipAddr 192.168.10.2) на своей машине с Windows.
На этой виртуальной машине я создал док-контейнер kvlite.
В Dockerfile выдается следующее CMD:
CMD ["java", "-jar", "lib/kvstore.jar", "kvlite"]
Как только контейнер док-станции kvlite был создан, я запустил следующие команды на своей виртуальной машине:
$ docker run --name nosql-container -d kvlite:latest
$ docker exec -it nosql-container bash
В приглашении контейнера bash я пытаюсь пропинговать мой клиент, используя следующую команду (но используя VM IpAddress, а не localhost):
# java -jar lib/kvstore.jar ping -port 5000 -host 192.168.10.2
Это однако бросает исключение
Подобрал _JAVA_OPTIONS: -Djava.security.egd= файл:/dev/./urandom
Не удалось подключиться к реестру в 192.168.10.2:5000 Невозможно подключиться к агенту узла хранения на хосте 192.168.10.2, порт 5000, который может не работать; Вложенное исключение:
java.rmi.ConnectException: в соединении отказано в хосте: 192.168.10.2; Вложенное исключение:
java.net.ConnectException: соединение отказано
Не удается найти топологию магазина: не удалось связаться ни с каким RepNode по адресу: [192.168.10.2:5000]
Но все работает хорошо, когда я использую -host
как localhost
то есть
# java -jar lib/kvstore.jar ping -port 5000 -host localhost
Чтобы решить эту проблему, я попытался следующее:
Я остановил свой док-контейнер kvlite
Изменено
config.xml ($KVROOT/config.xml)
для значенияhostname
вIpAddress
Перезапустил мой контейнер док-станции kvlite, но это не помогло, контейнер не запустился
Затем я попытался воссоздать новый образ докера для выдачи kvlite ниже CMD:
CMD ["java", "-jar", "lib/kvstore.jar", "kvlite", "-host", "192.168.10.2", "-port", "5000"]
Но и здесь, когда я попытался запустить kvlite docker container, он не запустился.
Я даже проверил мой /etc/hosts
файл для ввода IpAddress-192.168.10.2
,
Любая помощь оценена заранее.
1 ответ
Docker использует собственную виртуальную сеть на виртуальной машине.
Используемый по умолчанию сетевой докер имеет диапазон IP-адресов 172.17.xx, поэтому у запущенного вами контейнера есть собственный IP-адрес в этом диапазоне сети.
Чтобы найти IP вашего типа контейнера ifconfig
после входа в Контейнер с
$ docker exec -it nosql-container bash
Вы можете использовать IP-адрес контейнера для адресации контейнера изнутри контейнера.
Если вы хотите получить доступ к процессу из-за пределов контейнера через IP-адрес виртуальной машины, вам нужно указать порт (с -p) при запуске док-контейнера.
$ docker run --name nosql-container -p 5000:5000 -d kvlite:latest
Вы можете найти больше информации о сети Docker по умолчанию здесь.
Альтернативным подходом может быть совместное использование сети WM с вашим контейнером, указав --net = host.
$ docker run --name nosql-container --net=host -d kvlite:latest