почему Docker контейнер выходит с кодом 0? - PullRequest
0 голосов
/ 27 апреля 2018

Я сейчас пытаюсь создать Messenger Bot с платформой Botkit!

Поскольку я работаю на разных компьютерах, я хочу использовать docker для предотвращения проблем с локальной конфигурацией.

К сожалению, я новичок в ботките и докере.

структура файла

bot
├── README.md
├── docker
│   ├── botkit
│   │   └── Dockerfile
│   └── node
│       └── Dockerfile
├── docker-compose.yml
├── node_modules
└── package.json

4 directories, 5 files

докер-compose.yml

version: "2"
services:
    node:
        build: ./docker/node
        volumes_from:
            - "app"
    botkit:
        build: ./docker/botkit
        links:
            - "node"
        volumes_from:
            - "app"
    app:
        image: "node:8"
        working_dir: /home/nook_bot
        environment:
            - NODE_ENV=production
        volumes:
            - .:/home/nook_bot
            - /home/nook_bot/node_modules
        command: "npm init --yes && npm start"

докер / botkit / Dockerfile

FROM node:8
RUN npm install botkit

Докер / узел / Dockerfile * * 1016 FROM node:8 EXPOSE 8888 Действия по воспроизведению ошибки

Когда я бегу

docker-compose build

У меня есть

app uses an image, skipping
Building node
Step 1/2 : FROM node:8
8: Pulling from library/node
f2b6b4884fc8: Pull complete
4fb899b4df21: Pull complete
74eaa8be7221: Pull complete
2d6e98fe4040: Pull complete
452c06dec5fa: Pull complete
7b3c215894de: Pull complete
094529398b79: Pull complete
449fe646e95b: Pull complete
Digest: sha256:26e4c77f9f797c3993780943239fa79419f011dd93ae4e0097089e2145aeaa24
Status: Downloaded newer image for node:8
 ---> 4635bc7d130c
Step 2/2 : EXPOSE 8888
 ---> Running in 3a5be5fca913
Removing intermediate container 3a5be5fca913
 ---> 87cf54fd2907
Successfully built 87cf54fd2907
Successfully tagged nook_bot_node:latest
Building botkit
Step 1/2 : FROM node:8
 ---> 4635bc7d130c
Step 2/2 : RUN npm install botkit
 ---> Running in d57d1ac5e112
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#1 No description
npm WARN !invalid#1 No repository field.
npm WARN !invalid#1 No README data
npm WARN !invalid#1 No license field.

+ botkit@0.6.13
added 349 packages in 48.021s
Removing intermediate container d57d1ac5e112
 ---> 6530cdad7dfe
Successfully built 6530cdad7dfe
Successfully tagged nook_bot_botkit:latest

Тогда я делаю

docker-compose up

Я получаю

Creating nook_bot_app_1 ... done
Creating nook_bot_node_1 ... done
Creating nook_bot_botkit_1 ... done
Attaching to nook_bot_app_1, nook_bot_node_1, nook_bot_botkit_1
app_1     | Wrote to /home/nook_bot/package.json:
app_1     |
app_1     | {
app_1     |   "name": "nook_bot",
app_1     |   "version": "1.0.0",
app_1     |   "description": "",
app_1     |   "main": "index.js",
app_1     |   "dependencies": {},
app_1     |   "devDependencies": {},
app_1     |   "scripts": {
app_1     |     "test": "echo \"Error: no test specified\" && exit 1"
app_1     |   },
app_1     |   "repository": {
app_1     |     "type": "git",
app_1     |     "url": "git+https://github.com/Geoffrey42/nook_bot.git"
app_1     |   },
app_1     |   "keywords": [],
app_1     |   "author": "",
app_1     |   "license": "ISC",
app_1     |   "bugs": {
app_1     |     "url": "https://github.com/Geoffrey42/nook_bot/issues"
app_1     |   },
app_1     |   "homepage": "https://github.com/Geoffrey42/nook_bot#readme"
app_1     | }
app_1     |
app_1     |
nook_bot_node_1 exited with code 0
nook_bot_app_1 exited with code 0
nook_bot_botkit_1 exited with code 0

Если я побежал

docker exec -ti nook_bot_app_1 bash

Я получаю

Error response from daemon: Container a4c9724bc954c6bab19a5953c2fea315b95caf64f26c8ca0b036ca3f037fd398 is not running

Журналы

Я побежал

docker logs nook_bot_app_1

Я получаю

Wrote to /home/nook_bot/package.json:

{
  "name": "nook_bot",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {},
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Geoffrey42/nook_bot.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/Geoffrey42/nook_bot/issues"
  },
  "homepage": "https://github.com/Geoffrey42/nook_bot#readme"
}

Я не понимаю, почему docker не находит мой файл package.json, поскольку, запустив сборку docker-compose, он создает этот файл. Я предполагаю, что проблема с кодом выхода 0 возникла отсюда, но я действительно не понимаю, почему. Возможно, мне не хватает базовых знаний о том, как на самом деле работает докер.

Я искал другие вопросы о коде выхода 0, но ни один из ответов не помог.

В конце я просто хочу запустить bash на своем контейнере приложения, чтобы начать сборку своего бота.

Спасибо за любую дополнительную помощь!

Ответы [ 2 ]

0 голосов
/ 11 июля 2018

Попробуйте tty: true:

узел:

build: ./docker/node

volumes_from:
    - "app"
    tty: true

Это сработало для меня с контейнером PHP и MySQL.

0 голосов
/ 27 апреля 2018

Вы должны понимать, что Docker, прежде чем создавать ваш образ, должен подготовить контекст, в котором он будет создавать ваши файлы. У вас есть файл package.json, но вы никогда не добавляли его в контекст изображения.

Вы должны прочитать о COPY <src> <dest> из документации Dockerfile.

Инструкция COPY скопирует новые файлы из <src> и добавит их в файловую систему> контейнера по пути <dest>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...