Контейнер Docker не запускается при использовании флага --mount - PullRequest
0 голосов
/ 30 июня 2019

Я просто хочу создать док-контейнер, который извлекает из официального образа Node.js, используя рекомендации , найденные здесь .

Единственное изменение, которое я хочу сделать, это то, что я хотел бы смонтировать каталог хоста в свой контейнер, чтобы я мог создавать новые файлы на хосте и обновлять их в контейнере.

Я перепробовал каждое предложение здесь : -v флаг, --mount флаг и т. Д.

Но когда я использую эти флаги с командой run, контейнер фактически не запускается.

Я запускаю следующее:

docker run -p 49160:8080 -d myname/node-web-app --mount source=/Users/myname/desktop/dockyard/enviro

Выплевывает контейнер ID:

7302055670c231fb41d04d6475d42405cbee834e37e0827a68d7c396a918d3ec

Но когда я запускаю docker-ps список контейнеров становится пустым.

Когда я проверяю docker-ps -a, я вижу, что он был завершен с кодом 9:

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                         PORTS                    NAMES
dbf7973608a0        myname/node-web-app            "docker-entrypoint.s…"   4 seconds ago       Exited (9) 2 seconds ago                                quirky_sammet

Я искал объяснение кода 9 и ничего не могу найти.

Буду очень признателен за любую помощь, которая может быть оказана.

UPDATE

Пробовал: docker run -p 49160:8080 -d myimage -v /Users/myname/desktop/dockyard/enviro:/usr/src/main

Контейнер выходит с кодом 0. docker logs просто возвращает v11.15.0

Я понимаю, что это означает, что контейнер выходит из-за отсутствия процесса, НО, если я запускаю docker run -p 49160:8080 -d myimage без флага -v, контейнер работает отлично.

Так что не уверен, почему флаг -v приведет к выходу (0).

Dockerfile в соответствии с руководством Node.js:

FROM node:11

# Create app directory
WORKDIR /usr/src/main

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

1 Ответ

1 голос
/ 30 июня 2019

Возможно, во время отладки вам будет проще docker run --interactive --tty, чем docker run --detach.

Я думаю, что ваш синтаксис mount нарушен.Я думаю, что вам нужны source и target, иначе Docker Engine не знает, где отобразить каталог в контейнере.

Я менее знаком с синтаксисом --mount, поэтому, пожалуйста, попробуйте следующеедля сопоставления вашего локального каталога (/Users/myname/desktop/dockyard/enviro) с каталогом контейнера (/Users/myname)

--volume=/Users/myname/desktop/dockyard/enviro:/Users/myname

Когда контейнеры выходят, вы должны иметь возможность извлекать журналы, используя, например,

docker logs dbf7973608a0

Обновление

То, что вы предоставили должно работать;это для меня.

Я создаю простой сервер Express на :8080 и сопоставляю каталог хоста с контейнером.

Создан index.js:

const express = require('express')
const app = express()
const port = 8080

app.get('/', (req, res) => res.send('Happy Birthday Freddie!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

И package.json:

{
    "name": "test",
    "version": "0.0.1",
    "scripts": {
        "start": "node ./index.js"
    },
    "dependencies": {
        "express": "~4.17.1"
    }
}

Затем встроенный | запустил его:

docker build --tag=56822320 .
docker run \
--interactive \
--tty \
--publish=8080:8080 \
--volume=${PWD}:/test \
56822320

И он работает:

curl localhost:8080
Happy Birthday Freddie!

Чтобы доказать, что отображение работает:

docker run \
--interactive \
--tty \
--publish=8080:8080 \
--volume=${PWD}:/test \
56822320 /bin/sh
# ls /test
Dockerfile  index.js  package.json

HTH!

...