Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const Docker = require('dockerode');
- const names = ['redis', 'nats', 'postgres'];
- if (!names.includes(process.argv[2])) process.exit(1);
- const data = {
- redis: {
- port: '6379',
- image: process.env.IMAGE_NAME || 'redis:5-alpine',
- name: 'redis',
- },
- nats: {
- port: '4222',
- image: process.env.IMAGE_NAME || 'nats:1.4.1-linux',
- name: 'nats',
- },
- postgres: {
- port: '5432',
- image: process.env.IMAGE_NAME || 'postgres:9.6.11-alpine',
- name: 'postgres',
- password: process.env.POSTGRES_PASSWORD || '12345678'
- },
- };
- (async () => {
- const host = process.env.DOCKER_HOST;
- let dockerOptions;
- if (host) dockerOptions = { host };
- const docker = new Docker(dockerOptions || { socketPath: '/var/run/docker.sock' });
- const params = data[process.argv[2]];
- const stage = process.argv[3];
- if (!stage) throw new Error('Env stage does not specified as argument.');
- const containerName = `fixpoint.${stage}.${params.name}`;
- const containersList = await docker.listContainers({ all: true });
- let container = containersList.find(container => container.Names.includes(`/${containerName}`));
- let Env = [];
- if (params.name === 'postgres') {
- Env = [`POSTGRES_PASSWORD=${params.password}`];
- }
- try {
- if (!container) {
- container = await docker.createContainer({
- name: containerName,
- Image: params.image,
- AttachStdin: false,
- AttachStdout: true,
- AttachStderr: true,
- HostConfig: {
- PortBindings: {
- [`${params.port}/tcp`]: [{
- 'HostPort': '0',
- }],
- },
- },
- Env
- });
- await container.start();
- } else if (!container.Status.includes('Up')) {
- container = docker.getContainer(containerName);
- await container.start();
- }
- const { NetworkSettings: networkSettings } = await docker.getContainer(containerName).inspect();
- const json = JSON.stringify({ port: networkSettings.Ports[`${params.port}/tcp`][0].HostPort });
- console.log(json);
- } catch (err) {
- console.log(err.stack);
- process.exit(1);
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement