Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

269
Views
Cómo crear e iniciar Docker Container con puerto específico, modo separado usando docker-java

Quiero crear y ejecutar Docker usando el cliente Docker Java. Quiero ejecutar algo como esto:

 docker run -d -p 4444:4444 --name selenium-hub selenium/hub:2.53.0

¿Cómo implementar este comando en el cliente docker-java? Aquí está mi código hasta ahora :

 CreateContainerResponse response = dockerClient.createContainerCmd("selenium/hub") .withName(name) .exec();

En realidad IDK cómo especificar -d (para ejecutar en segundo plano). y P. por favor, ayúdame. Lo siento, soy nuevo en Docker.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

docker-java versión 3.1.0 ha movido el método withPortBindings de la clase CreateContainerCmd a la clase HostConfig .

Aquí está la forma actualizada de hacerlo:

 ExposedPort tcp4444 = ExposedPort.tcp(4444); Ports portBindings = new Ports(); portBindings.bind(tcp4444, Ports.Binding.bindPort(4444)); // create container from image CreateContainerResponse container = dockerClient.createContainerCmd("selenium/hub:2.53.0") .withExposedPorts(tcp4444) .withHostConfig(newHostConfig() .withPortBindings(portBindings)) .withName("selenium-hub") .exec(); // start the container dockerClient.startContainerCmd(container.getId()).exec();

Como nota al margen, tuve que mirar las pruebas unitarias en el repositorio docker-java para encontrar cómo hacer esto. Parece que ese es el lugar para ir a encontrar ejemplos de trabajo.

about 4 years ago · Santiago Trujillo Report

0

docker-java tiene un buen wiki en https://github.com/docker-java/docker-java/wiki . La búsqueda de "puerto" me dio esto:

Cree un nuevo contenedor Docker e inícielo con puertos expuestos

 ExposedPort tcp22 = ExposedPort.tcp(22); ExposedPort tcp23 = ExposedPort.tcp(23); Ports portBindings = new Ports(); portBindings.bind(tcp22, Ports.Binding(11022)); portBindings.bind(tcp23, Ports.Binding(11023)); CreateContainerResponse container = dockerClient.createContainerCmd("busybox") .withCmd("true") .withExposedPorts(tcp22, tcp23) .withPortBindings(portBindings) .exec();

Revisé algunas pruebas en docker-java y parece que solo hiciste la mitad del trabajo para ejecutar un contenedor, porque solo creaste el contenedor y no lo iniciaste . Según lo que veo en esta prueba ( https://github.com/docker-java/docker-java/blob/069987852c842e3bba85ed3325a8877c36f9e87f/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java#L69 ), su código debería verse así:

 ExposedPort tcp4444 = ExposedPort.tcp(4444); Ports portBindings = new Ports(); portBindings.bind(tcp4444, Ports.Binding(4444)); // Create the container (it will not be running) CreateContainerResponse container = dockerClient.createContainerCmd("selenium/hub") .withName(name) .withExposedPorts(tcp4444) .withPortBindings(portBindings) .exec(); // Actually run the container dockerClient.startContainerCmd(container).exec();

Por lo que puedo decir, no hay razón para ejecutarlo explícitamente en modo separado porque se iniciará de forma asíncrona de forma predeterminada.

about 4 years ago · Santiago Trujillo Report

0

Encontré la solución... si alguien encuentra una mejor, publíquela aquí. Ya modifiqué el código para que quede así:

 ExposedPort tcp4444 = ExposedPort.tcp(4444); Ports portBindings = new Ports(); portBindings.bind(tcp4444,Ports.Binding.bindPort(4444)); CreateContainerResponse response = dockerClient. createContainerCmd("selenium/hub") .withName(name) .withImage("selenium/hub:"+version) .withExposedPorts(tcp4444) .withPortBindings(portBindings) .withAttachStderr(false) .withAttachStdin(false) .withAttachStdout(false) .exec();`
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!