400 Ошибка HTTP GET-запроса между Docker-контейнерами с HTTPURLConnection - PullRequest
0 голосов
/ 28 июня 2018

Я получил два контейнера, определенных в файле docker-compose:

 
 tomcat_webserver_api:
  image: tomcat:8
  volumes:
   - ./API/Docker/API.war:/usr/local/tomcat/webapps/API.war
  ports:
    - "8080:8080"
  depends_on:
   - mysql_database

 tomcat_webserver_anwendung:
  image: tomcat:8
  ports:
   - "8081:8080"
  volumes:
   - ./Anwendung/Docker/Anwendung.war:/usr/local/tomcat/webapps/Anwendung.war
  depends_on:
   - tomcat_webserver_api
  environment:
    API_HOST: tomcat_webserver_api
    API_PORT: 8080

Теперь я хочу получить доступ к URL http://tomcat_webserver_api:8080/API/restaurants/Wochentag изнутри веб-приложения Java с помощью HttpURLConnection.

Проблема: возвращается ошибка 400

java.io.IOException: Server returned HTTP response code: 400 for URL: http://tomcat_webserver_api:8080/API/restaurants/Wochentag

Код выглядит так (Заголовки почти одинаковы, когда я пытаюсь подключиться к URL через curl - это работает внутри контейнера, да):


    URL api = UriBuilder.fromUri("http://" + "tomcat_webserver_api" + ":" + "8080" +"/API/restaurants/RestaurantSpeisen").build().toURL();

    System.setProperty("http.agent", "curl/7.52.1");

    HttpURLConnection connection = (HttpURLConnection) api.openConnection();
    connection.setRequestMethod("GET");
    connection.setRequestProperty("Host", "localhost");
    connection.setRequestProperty("User-Agent", "curl/7.52.1");
    connection.connect();

    BufferedReader in = new BufferedReader(new             InputStreamReader(connection.getInputStream(), "UTF-8"));

Если я пытаюсь подключиться к http://172.20.0.3:8080/API/restaurants/Wochentag, я получаю 200-й код ответа HTTP и данные JSON.

Если я выполняю контейнер API и проверяю журналы, я вижу запрос GET 400.

Почему это происходит?

http://172.20.0.3:8080/API/restaurants/Wochentag - Работы http://tomcat_webserver_api:8080/API/restaurants/Wochentag - не будет работать, но не с ошибкой 404

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

У меня была та же проблема, что и у вас, очевидно, подчеркивание не разрешено в качестве виртуального хоста, попробуйте удалить его, например, используйте просто tomcatwebserverapi, который должен решить вашу проблему.

См. . Могут ли субдомены (имя домена) иметь подчеркивание "_"? для получения дополнительной информации о допустимых буквах в именах хостов.

0 голосов
/ 03 августа 2018

Пожалуйста, попробуйте явные имена контейнеров:

tomcat_webserver_api:
  image: tomcat:8
  container_name: tomcat_webserver_api
  volumes:
   - ./API/Docker/API.war:/usr/local/tomcat/webapps/API.war
  ports:
    - "8080:8080"
  depends_on:
   - mysql_database

tomcat_webserver_anwendung:
  container_name: tomcat_webserver_app
  image: tomcat:8
  ports:
   - "8081:8080"
  volumes:
   - ./Anwendung/Docker/Anwendung.war:/usr/local/tomcat/webapps/Anwendung.war
  depends_on:
   - tomcat_webserver_api
  environment:
    API_HOST: tomcat_webserver_api
    API_PORT: 8080

Конфигурация «только локальная» требует явных имен контейнеров, чтобы активировать механизм поиска имен Docker. В режиме Swarm вам не нужно устанавливать имена контейнеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...