Мой файл для создания докеров:
webapp:
container_name: webapp
hostname: webservice-server
build:
context: .
dockerfile: ServerDockerfile // ServerDockerfile starts tomcat
ports:
- "8080:8080"
webservices_test_client:
build:
context: .
dockerfile: TestsDockerfile
depends_on:
- webapp
Когда я пытаюсь отправить запрос на «http://webservice-server:8080/» через Apache HttpClient из тестов в контейнере webservices_test_client, я получаю UnknownHostException.
HttpGet httpGet = new HttpGet("http://webservice-server:8080/");
HttpResponse httpResponse = httpClient.execute(httpGet);
Что не так? Спасибо за ответы.
@JAMSHAID да, порт открыт
То, что вы здесь показываете, заключено в блок services:
или это весь файл docker-compose.yml
?
@DavidMaze это весь файл docker-compose.yml
Вы не указали сеть. С hostname: webservice-server
вы просто устанавливаете имя хоста внутри контейнера webapp
. У вас должна быть сеть, чтобы разные контейнеры могли видеть друг друга. Если вы не хотите создавать сеть для каждого контейнера, просто используйте networks: default aliases
Пожалуйста, вы можете мне объяснить? Я знаю, что docker-compose по умолчанию настраивает сеть для приложения. Контейнеры автоматически подключаются к этой сети. Если я прав, то мой вопрос звучит так: «Зачем нам явно создавать сеть, если у нас есть сеть, созданная по умолчанию?» Спасибо
@Michael, потому что эта функция предназначена для более поздних версий docker-compose. В версии, которую вы используете (V1), вам нужно указать сеть.
В вашем файле docker-compose.yml
отсутствует строка version:
и оболочка services:
. Это делает его устаревшим версия 1 Создать файл, который не настраивает для вас сеть Docker. У самых современных инструментов возникнут проблемы с его запуском, потому что они будут интерпретировать файл как Составление спецификации четвертого поколения.
На верхнем уровне добавьте version:
объявление, какую версию использовать (я предпочитаю использовать самую последнюю версию 3.8, не относящуюся к «спецификации»), и оберните объявления, которые у вас есть сейчас, в services:
:
version: '3.8'
services:
webapp:
build:
context: .
dockerfile: ServerDockerfile
ports:
- "8080:8080"
webservices_test_client:
build:
context: .
dockerfile: TestsDockerfile
depends_on:
- webapp
Вам не нужно объявлять networks:
, container_name:
или hostname:
. В файле Compose версии 2 или 3 Compose настраивает эти вещи за вас, а имена службы Compose, такие как webapp
, можно будет использовать в качестве имен хостов для вызова между контейнерами. Сеть в Compose в документации Docker содержит более подробную информацию.
Ваш порт открыт для входящих подключений?