Как запустить контейнер для приложения Node.js, используя файл Docker-compose.yml без использования файла Dockerfile - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь реализовать простое приложение Node.js, используя только файл Docker-compose. Я немного запутался, когда запускаю докер с помощью команды docker-compose up и проверяю работающий контейнер, в котором написано restarting, и ничего не происходит.

Я хочу реализовать это приложение Node.js, используя только docker-compose.yml файл и без использования Dockerfile. Большинство примеров в сети используют отдельный Dockerfile для Node.js для создания образа, и этот образ использовался файлом docker-compose.yml для создания контейнера.

Я пробовал то же самое сDockerfile и это прекрасно сработало для меня. Но когда я удаляю этот Dockerfile и просто использую файл docker-compose.yml, я сталкиваюсь с проблемой restarting:

Error response from daemon: Container a7fe8cdc262ae6c57e33b60b1a69084df1313e590 is restarting, wait until the container is running

docker-compose.yml file:

version: '3'

services:
  db:
    build: ./db
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: mypass
      MYSQL_USER: mysql
      MYSQL_PASSWORD: mypass
      DATABASE_HOST: myhost
  web:
    image: node:8
    volumes:
      - ./web:/usr/src/app
    working_dir: /usr/src/app
    command: bash -c "npm run start && tail -F"
    depends_on:
      - db
    restart: on-failure

Myindex.js file:

     //Make NodeJS to Listen to a particular Port in Localhost
     const   port        =   process.env.PORT || 9000;; 
     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);
        });
    });

Мой предыдущий Dockerfile для Node.js, который я пытаюсь удалить:

FROM node:8

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 9000

CMD ["npm","start"]

CMD tail -f /dev/null

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Запустить приложение узла через файл docker-compose.

version: "3.7"
networks:
  main-network;

services:

 app:
   container_name: app
   image: node:latest
   restart: always
   volumes:
    - ./app:/home/node/app
   working_dir: /home/node/app
   ports:
    - 3000:3000
   networks:
    - main-network
   command: "npm start"
   depends_on:
    - db
   logging:
     driver: "json-file"
     options:
       max-file: "4"
       max-size: "100m"
0 голосов
/ 24 октября 2019

Большое спасибо всем за ответы и комментарии. Если кто-то застрял в этом, я использовал следующие команды в файле docker-compose.yml. Это не требует каких-либо дополнительных Dockerfile для построения образа.

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: mypass
      MYSQL_USER: mysql
      MYSQL_PASSWORD: mypass
      DATABASE_HOST: myhost

  web:
    container_name: web
    image: node:8
    volumes:
      - ./web:/usr/src/app
    working_dir: /usr/src/app
    depends_on:
      - db
    restart: on-failure
    command: "tail -f /dev/null && npm start"

  adminer:
    image: adminer
    restart: always
    ports:
      - "7778:8080"

Также важно, чтобы эта команда была в вашем файле package.json, если у вас нет этой команды, то вывозникнет проблема:

"start": "nodemon index.js",

 "main": "index.js",
  "scripts": {
    "preinstall": "npm i nodemon -g",
    "start": "nodemon index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
...