Контейнеры Docker возвращаются с неверной переменной средыJAVA

Программисты JAVA общаются здесь
Anonymous
Контейнеры Docker возвращаются с неверной переменной среды

Сообщение Anonymous »

Для курса в моей степени бакалавра мне нужно настроить связь с RPC между 1 магистральным/контроллером и 3 работниками, использующими Thrift. Проблема, которую я имею сейчас, заключается в том, что, хотя переменные среды правильно устанавливаются для рабочих контейнеров, когда мастер отправляет запрос на Ping, он бросает исключение, в котором указывается, что правильная установленная переменная среды-NULL.
Изображения контейнеров создаются с использованием JIB.master | PORT: null
master | Exception in thread "main" java.lang.NumberFormatException: Cannot parse null string
master | at java.base/java.lang.Integer.parseInt(Unknown Source)
master | at java.base/java.lang.Integer.parseInt(Unknown Source)
master | at org.example.worker.Worker.start(Worker.java:137)
master | at org.example.worker.Main.main(Main.java:10)
database | Exception in thread "Thread-3" java.lang.NullPointerException: Cannot invoke "String.contains(java.lang.CharSequence)" because "inputLine" is null
database | at org.example.database.DatabaseServer$EchoClientHandler.run(DatabaseServer.java:57)
master exited with code 1
< /code>
docker-compose: < /p>
version: '3.9'

services:

master:
image: master-image:latest
container_name: master
build:
context: ./VS_Project/Master
dockerfile: ./Dockerfile
ports:
- '8080:8080'
environment:
network_mode: host
depends_on:
- worker_1
- worker_2
- worker_3

worker_1:
image: worker-image:latest
container_name: worker_1
build:
context: ./VS_Project/Worker
dockerfile: ./Dockerfile
ports:
- '8081:8080'
depends_on:
- database
environment:
- PORT=8081

worker_2:
image: worker-image:latest
container_name: worker_2
build:
context: ./VS_Project/Worker
dockerfile: ./Dockerfile
ports:
- '8082:8080'
depends_on:
- database
environment:
- PORT=8082

worker_3:
image: worker-image:latest
container_name: worker_3
build:
context: ./VS_Project/Worker
dockerfile: ./Dockerfile
ports:
- '8083:8080'
depends_on:
- database
environment:
- PORT=8083
< /code>
Master-код: < /p>
public void start() {
//RPC connection to worker

for(Map.Entry worker : workers.entrySet()) {

try {
TTransport transport;

transport = new TSocket(worker.getValue(), worker.getKey());
transport.open();

TProtocol protocol = new TBinaryProtocol(transport);
Calculator.Client client = new Calculator.Client(protocol);

System.out.print("Calling remote method...worker port:" + worker.getKey()); //e.g. Port 8081

client.ping();

System.out.println("done.");

transport.close();

} catch (TException e) {
e.printStackTrace();
}
}
< /code>
Код Worker: < /p>
public void start() {

assert (System.getenv("PORT") != null);
System.out.println("PORT: " + System.getenv("PORT"));
try {
serverTransport = new TServerSocket(Integer.parseInt(System.getenv("PORT")));
server = new TSimpleServer(new TServer.Args(serverTransport).processor(new Calculator.Processor(new CalculatorImpl())));
System.out.print("Starting the server... Port:" + System.getenv("PORT"));
server.serve();
System.out.println("done.");
}
catch (TTransportException e) {
e.printStackTrace();
stop();
}
}


Подробнее здесь: https://stackoverflow.com/questions/749 ... t-variable

Вернуться в «JAVA»