Я развернул очень простой док-контейнер MSSQL с помощью следующей команды запуска докера:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=NotYourBusiness" -p 2433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-latest
У меня установлена SSMS на моем компьютере, и я могу подключиться к этому экземпляру по следующему URL-адресу:
MyHostName,2433
Я могу запустить приложение весенней загрузки со своей машины также со следующей строкой подключения:
dataSource.setJdbcUrl("jdbc:sqlserver://localhost:2433;database=SomeDatabase;");
При наличии только MSSQL в контейнере Docker мое приложение отлично работает измоя машина.
Теперь я хочу также поместить мое весеннее загрузочное приложение в контейнер.Поэтому я создал следующий файл Docker:
FROM openjdk:11-jre-slim
VOLUME /tmp
EXPOSE 8082
ADD target/tno-1.0.jar tno-1.0.jar
ENTRYPOINT ["java","-jar","tno-1.0.jar"]
Это команда сборки, которую я использую для создания образа:
docker build -f Dockerfile -t tno .
И это команда, которую я использую для сборки контейнера:
docker run -t --name tno --link sql1:mssql -p 8082:8082 tno
При использовании той же строки подключения, которая работает на моем компьютере, приложение весенней загрузки не запускается с ошибкой отказа в подключении.Я просмотрел много постов, и они указали, что термин «localhost» больше не применяется при запуске из контейнера, поскольку он относится только к этому контейнеру.Единственный способ заставить его работать - это заменить localhost: 2433 на IP-адрес контейнера: 1433.
Это вполне приемлемо, но есть ли способ для контейнера вести себя как моя машина разработки иМожно ли подключиться к другому контейнеру, как если бы соединение исходило из внешнего мира?
Спасибо