Как я могу использовать docker-compose
для создания контейнера и передачи параметра моему приложению Node.js во время запуска?
Я пытаюсь написать программу, в которой я могу подключиться к MYSQL с помощью NODEJS ииспользуя DOCKER-COMPOSE. Мне нужно запустить приложение в терминале, чтобы я мог передать некоторые параметры моему приложению Node.js во время запуска, поэтому мне нужно запустить DOCKER-COMPOSE UP, чтобы вызвать приложение, и MYSQL, а затем я хочу запустить приложение, используяCLI в другом окне.
Здесь находится мой index.js
файл, находящийся в папке web
, который будет принимать данные от пользователя, когда я запускаю следующую команду nodemon start New
.
//Make NodeJS to Listen to a particular Port in Localhost
const port = 9010;
app.listen(port, function(){
// Start the server and read the parameter passed by User
console.log("Node js is Running on : "+port);
// Get process.stdin as the standard input object.
var standard_input = process.stdin;
// Set input character encoding.
standard_input.setEncoding('utf-8');
// Prompt user to input data in console.
console.log("Please input text in command line.");
// When user input data and click enter key.
standard_input.on('data', function (data) {
console.log(" DATA ENTERED BY USER IS :"+data);
});
});
Я хочу добиться этого, используя docker-compose
, поэтому у меня есть следующий код для файла docker-compose.yml
.
version: '3'
services:
db:
build: ./db
environment:
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: mypass
MYSQL_USER: mysql
MYSQL_PASSWORD: mypass
DATABASE_HOST: myhost
web:
build: ./web
depends_on:
- db
restart: on-failure
ports:
- "9010:9010"
adminer:
image: adminer
restart: always
ports:
- "7778:8080"
Мой Dockerfile
для Интернета или Node.js в папке web
:
FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 9010
CMD ["npm","start"]
My Dockerfile
для базы данных MYSQL
в папке db
:
FROM mysql:5.7
EXPOSE 3306
COPY ./scripts /docker-entrypoint-initdb.d/
Теперь, когда я запускаю команду docker-compose up --build
для docker-compose.yml
файл то все работает нормально;приложение контейнера и Node.js запускается.
Когда я открываю другое окно терминала и пытаюсь перейти к контейнеру web
, используя docker-compose exec web sh
, и запускаю приложение узла для передачи параметров nodemon start New
, тогда я получаюследующая ошибка.
events.js:183
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE :::9010
at Server.setupListenHandle [as _listen2] (net.js:1360:14)
Поскольку приложение Nodejs уже запущено, когда я выполнил команду docker-compose up --build
, порт уже назначен, поэтому я получаю эту ошибку, как я могу запустить приложение Indey.js и передатьпараметры к нему?
Я использую Ubuntu Os для приложения.