¿Cómo puedo cambiar el puerto en el que se inicia dynamodb a través de la imagen de Amazon Docker?
De acuerdo con esta respuesta , la opción -port se puede usar al ejecutar el archivo java de dynamodb.
Sin embargo, cuando ejecuto la imagen de la ventana acoplable con este comando: docker run -p 8000:8000 amazon/dynamodb-local , no tengo la opción de especificar el puerto que escucha dynamodb, solo el puerto conectado entre mi host y el contenedor.
¿Tendría que crear mi propio Dockerfile, especificar el sistema operativo e instalar dynamodb y otras cosas, para poder ejecutar el comando java y especificar mi puerto?
No es necesario reconstruir la imagen. Haciendo
docker inspect amazon/dynamodb-localmuestra que el punto de entrada está configurado como
"Entrypoint": [ "java" ],Así que ejecutar el siguiente comando da un error:
$ docker run -p 8001:8001 amazon/dynamodb-local -port 8001 Unrecognized option: -port Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.porque estamos tratando de pasar el argumento -port a java pero necesitamos pasarlo a DynamoDBLocal.jar .
Una vez que sepamos eso, podemos agregar el jar a la ejecución de Docker y lo siguiente funciona:
$ docker run -p 8001:8001 amazon/dynamodb-local -jar DynamoDBLocal.jar -port 8001 Initializing DynamoDB Local with the following configuration: Port: 8001 InMemory: false DbPath: null SharedDb: false shouldDelayTransientStatuses: false CorsParams: *Lo plantearía como un error, pero https://hub.docker.com/r/amazon/dynamodb-local/ no menciona un repositorio público de github para plantear el problema.
Probé la imagen oficial para anular el punto de entrada, pero hubo un error desconocido, pero puede seguir con este enfoque. Simplemente cree una nueva imagen de Docker desde amazon/dynamodb-local como imagen base. Construir.
docker build -t mydb .y ejecutarlo
docker run -it --rm -p 8001:8001 mydbA continuación se muestra el Dockerfile
FROM amazon/dynamodb-local WORKDIR /home/dynamodblocal ENTRYPOINT ["java", "-jar", "DynamoDBLocal.jar", "-port", "8003"]Como verás el puerto.
Por alguna razón docker-compose no asigna puertos al host para dynamodb. La siguiente configuración no funcionará para la imagen dynamodb-local :
ports: - "9000:8000" La solución es colocar el puerto directamente en el comando, -port 9000 es lo mismo que los ports: - "9000:9000" en docker-compose.
version: "3.8" services: service-dynamodb: image: amazon/dynamodb-local image: "amazon/dynamodb-local:latest" working_dir: /home/dynamodblocal # -port {number} is the same as # ports: - {number}:{number} in Docker command: "-jar DynamoDBLocal.jar -port 9000 -sharedDb -optimizeDbBeforeStartup -dbPath ./data" volumes: - ./data:/home/dynamodblocal/data