2016-04-07 1 views
0

мы развертывается Докер-изображение, используя следующую команду:Bluemix Docker контейнеров результаты развертывания в «Нет маршрут пройдет»

cf ic run -p 8080 -m 512 -e SPRING_PROFILES_ACTIVE=test -e logging.config=classpath:logback-docker-test.xml --name <container-name> registry.eu-gb.bluemix.net/<repository_name>/<container-name>:latest 

В этом контейнере мы начинаем приложение Java8 Spring-загрузки, который использует Соединения- поставщик пула. Поставщик объединения соединений подключается к существующей PostgreSQL-базе данных, доступной на стандартном порту. Мы не используем ни одного имени домена для подключения к PostgreSQL-базе данных. Мы используем только IP-адрес и стандартный порт postgresql.

Развертывание работает на машине, которая использует стандартный демон демонстратора Docker, а также без проблем работает с Amazon WebServices (AWS) и использует тот же механизм развертывания.

Однако, если мы развертывания образа на Bluemix-Container-Service мы получаем следующее сообщение об ошибке при запуске приложения весна-загрузки:

Caused by: java.net.NoRouteToHostException: No route to host 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at org.postgresql.core.PGStream.<init>(PGStream.java:61) 
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:129) 
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65) 
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:146) 
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:35) 
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22) 
    at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:47) 
    at org.postgresql.jdbc42.AbstractJdbc42Connection.<init>(AbstractJdbc42Connection.java:21) 
    at org.postgresql.jdbc42.Jdbc42Connection.<init>(Jdbc42Connection.java:28) 
    at org.postgresql.Driver.makeConnection(Driver.java:415) 
    at org.postgresql.Driver.access$100(Driver.java:47) 
    at org.postgresql.Driver$ConnectThread.run(Driver.java:325) 
    ... 1 more 

Мы не знаем, почему это происходит, потому что, если мы делаем telnet на другой Bluemix-Docker-Machine на сервере PostgreSQL-Database с нужным портом, все в порядке.

Это очень раздражает, поскольку мы не можем использовать этот Docker-Image на Bluemix в настоящее время и в настоящее время препятствуем нашему запланированному развертыванию.

Вы можете помочь нам с подробностями, что может быть неправильно и как это исправить?

Любая помощь будет оценена по достоинству.

С уважением,

христианских

ответ

1

Официальный bluemix поддержка дала намек ждать 120 секунд, прежде чем запускать Java-приложение, которое нуждается в сетевом доступе. Предлагаемый способ:

CMD ["/bin/sh", "-c", "sleep 120; exec java $JVM_ARGS -cp /app org.springframework.boot.loader.JarLauncher --spring.main.show_banner=false"] 

С этим у нас есть доступ к сети, и все в порядке.

1

подняла ли эта ошибка, когда контейнер запускается? Если это так, Docker/IBM Containers on Bluemix занимает около 30-60 секунд в сетевом состоянии: на этом этапе контейнер не может подключиться к сети. На самом деле, вероятно, это основная причина ошибки, которую вы получаете: если приложение Java SpringBoot пытается подключиться к базе данных PostgreSQL, когда контейнер все еще находится в сетевой фазе, с этой ошибкой произойдет ошибка. Вы должны запустить приложение, запущенное на контейнере, когда контейнер завершил фазу сети (например, через сценарий bash, который проверяет наличие сервера PostgreSQL, или просто настройте свою пружинную ручку для управления этим исключением)

+0

Спасибо за ваш ответ и комментарий. К сожалению, это немного разочаровывает, потому что на службе Docker в AWS или с помощью Docker непосредственно на одной из ваших внутренних систем все отлично с одним и тем же Docker-Image. Поэтому нам нужно внести некоторые изменения в Docker-Image для поддержки Bluemix. Я думаю, что это не идея независимого докер-образа. В любом случае у вас есть предложение/подсказка, чтобы подождать, пока не будет установлено сетевое соединение? –

Смежные вопросы