From 32439ea9c49398978863e1399f480afc3abc8ec5 Mon Sep 17 00:00:00 2001 From: Henrik Hall Date: Thu, 13 Jan 2022 18:03:40 +0100 Subject: [PATCH] Add support for dockerized DynamoDBLocal This adds a new option which if true starts DynamoDB using docker, e.g. docker run -d -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -port 8000 -sharedDb -inMemory The docker executable may be customized using process.env.DOCKER_PATH, and the docker image through provess.env.DOCKER_IMAGE. Enabling support for docker resolves some issues with running the DynamoDB Java server on incompatible architectures such as Apple M1. --- dynamodb/starter.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/dynamodb/starter.js b/dynamodb/starter.js index d21b0ec..9e3db2f 100644 --- a/dynamodb/starter.js +++ b/dynamodb/starter.js @@ -39,17 +39,28 @@ var starter = { additionalArgs.push('-help'); } - var args = ['-Djava.library.path=' + db_dir + '/DynamoDBLocal_lib', '-jar', jar, '-port', port]; - args = preArgs.concat(args.concat(additionalArgs)); + var args = ['-jar', jar, '-port', port]; + var executable; + var cwd; - var child = spawn('java', args, { - cwd: db_dir, + if (options.docker) { + executable = process.env.DOCKER_PATH || 'docker'; + preArgs = ['run', '-d', '-p', port + ':' + port, process.env.DOCKER_IMAGE || 'amazon/dynamodb-local']; + } else { + executable = 'java'; + preArgs.push('-Djava.library.path=' + db_dir + '/DynamoDBLocal_lib'); + cwd = db_dir; + } + + args = preArgs.concat(args.concat(additionalArgs)); + var child = spawn(executable, args, { + cwd: cwd, env: process.env, stdio: ['pipe', 'pipe', process.stderr] }); if (!child.pid) { - throw new Error('Unable to start DynamoDB Local process! Make sure you have java executable in your path.'); + throw new Error('Unable to start DynamoDB Local process! Make sure you have ' + executable + ' executable in your path.'); } child.on('error', function (code) {