Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

267
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda