docker-compose.yml — не удается установить экспресс-сервер

#docker #docker-compose

#docker #docker-compose

Вопрос:

У меня есть то, что кажется простой ошибкой, но я просто не вижу, где я ошибаюсь. У меня есть следующий файл Dockerfile:

 admins-Mac-mini-3:closetbrewsapp admin$ cat Dockerfile 
FROM node:0.12.7

    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app
    
    COPY . /usr/src/app
    RUN npm install
    
    EXPOSE 3000
    
    CMD ["npm", "start"]

I start it like this: 

    admins-Mac-mini-3:closetbrewsapp admin$ docker build -t mytest .
    [ ] Building 0.1s (10/10) FINISHED                                                                                                                                                                                                                                                     
     => [internal] load .dockerignore                                                                                                                                                                                                                                                 0.0s
     => => transferring context: 2B                                                                                                                                                                                                                                                   0.0s
     => [internal] load build definition from Dockerfile                                                                                                                                                                                                                              0.0s
     => => transferring dockerfile: 37B                                                                                                                                                                                                                                               0.0s
     => [internal] load metadata for docker.io/library/node:0.12.7                                                                                                                                                                                                                    0.0s
     => [1/5] FROM docker.io/library/node:0.12.7                                                                                                                                                                                                                                      0.0s
     => [internal] load build context                                                                                                                                                                                                                                                 0.1s
     => => transferring context: 38.53kB                                                                                                                                                                                                                                              0.0s
     => CACHED [2/5] RUN mkdir -p /usr/src/app                                                                                                                                                                                                                                        0.0s
     => CACHED [3/5] WORKDIR /usr/src/app                                                                                                                                                                                                                                             0.0s
     => CACHED [4/5] COPY . /usr/src/app                                                                                                                                                                                                                                              0.0s
     => CACHED [5/5] RUN npm install                                                                                                                                                                                                                                                  0.0s
     => exporting to image                                                                                                                                                                                                                                                            0.0s
     => => exporting layers                                                                                                                                                                                                                                                           0.0s
     => => writing image sha256:b1aebbd423e2e008bf2192eea796ec6bf1b6d96af810bf9d1f00d00588575b12                                                                                                                                                                                      0.0s
     => => naming to docker.io/library/mytest                                                                                                                                                                                                                                         0.0s
    admins-Mac-mini-3:closetbrewsapp admin$ docker run -d -p 3000:3000 mytest
    c00f9679bb7794e133d991eb5e38cf3bf563366aa2c1b45e82d0113c3b056654

admins-Mac-mini-3:closetbrewsapp admin$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS                                              NAMES
c00f9679bb77        mytest                        "npm start"         2 seconds ago       Up 1 second         0.0.0.0:3000->3000/tcp                             blissful_yalow


admins-Mac-mini-3:closetbrewsapp admin$ curl http://localhost:3000
{"msg":"hello world"}admins-Mac-mini-3:closetbrewsapp admin$
 

Теперь я пытаюсь сделать то же самое, используя файл docker-compose:
Вот как выглядит docker-compose.yml.

 webservice:
  build: .
  ports:
    - "3000:3000"
  environment:
    port: "80"
  volumes:
    - .:/usr/src/app
 

Затем я пытаюсь построить так:

 admins-Mac-mini-3:closetbrewsapp admin$ docker-compose  up -d 
Building webservice
Step 1/7 : FROM node:0.12.7
 ---> 64af6a5d1e4a
Step 2/7 : RUN mkdir -p /usr/src/app
 ---> Running in 07d86d3cd1b9
Removing intermediate container 07d86d3cd1b9
 ---> f3bfce66538c
Step 3/7 : WORKDIR /usr/src/app
 ---> Running in c50610ddf0c9
Removing intermediate container c50610ddf0c9
 ---> 2d1018582cfb
Step 4/7 : COPY . /usr/src/app
 ---> 58c845f0fee4
Step 5/7 : RUN npm install
 ---> Running in 0af173e17e5b
npm WARN package.json docker-express@1.0.0 No description
npm WARN package.json docker-express@1.0.0 No repository field.
npm WARN package.json docker-express@1.0.0 No README data
npm WARN engine mime@1.6.0: wanted: {"node":">=4"} (current: {"node":"0.12.7","npm":"2.14.1"})
express@4.17.1 node_modules/express
├── escape-html@1.0.3
├── array-flatten@1.1.1
├── utils-merge@1.0.1
├── cookie-signature@1.0.6
├── merge-descriptors@1.0.1
├── methods@1.1.2
├── path-to-regexp@0.1.7
├── range-parser@1.2.1
├── setprototypeof@1.1.1
├── encodeurl@1.0.2
├── vary@1.1.2
├── fresh@0.5.2
├── parseurl@1.3.3
├── content-type@1.0.4
├── etag@1.8.1
├── statuses@1.5.0
├── cookie@0.4.0
├── content-disposition@0.5.3
├── serve-static@1.14.1
├── safe-buffer@5.1.2
├── depd@1.1.2
├── on-finished@2.3.0 (ee-first@1.1.1)
├── finalhandler@1.1.2 (unpipe@1.0.0)
├── proxy-addr@2.0.6 (forwarded@0.1.2, ipaddr.js@1.9.1)
├── debug@2.6.9 (ms@2.0.0)
├── qs@6.7.0
├── send@0.17.1 (destroy@1.0.4, ms@2.1.1, mime@1.6.0, http-errors@1.7.3)
├── accepts@1.3.7 (negotiator@0.6.2, mime-types@2.1.27)
├── type-is@1.6.18 (media-typer@0.3.0, mime-types@2.1.27)
└── body-parser@1.19.0 (bytes@3.1.0, raw-body@2.4.0, http-errors@1.7.2, iconv-lite@0.4.24)
Removing intermediate container 0af173e17e5b
 ---> 51c44941c0de
Step 6/7 : EXPOSE 3000
 ---> Running in 5b1fc7d3617a
Removing intermediate container 5b1fc7d3617a
 ---> 222b6e5cd897
Step 7/7 : CMD ["npm", "start"]
 ---> Running in a35bc6105f6b
Removing intermediate container a35bc6105f6b
 ---> c12ef6c849f7

Successfully built c12ef6c849f7
Successfully tagged closetbrewsapp_webservice:latest
WARNING: Image for service webservice was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Recreating closetbrewsapp_webservice_1 ... error

ERROR: for closetbrewsapp_webservice_1  no such image: sha256:73b5c6419ecce67dc6872c92dc6aefe51ad8f9353a2c42f38102cb1431518f36: No such image: sha256:73b5c6419ecce67dc6872c92dc6aefe51ad8f9353a2c42f38102cb1431518f36

ERROR: for webservice  no such image: sha256:73b5c6419ecce67dc6872c92dc6aefe51ad8f9353a2c42f38102cb1431518f36: No such image: sha256:73b5c6419ecce67dc6872c92dc6aefe51ad8f9353a2c42f38102cb1431518f36
ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.

Continue with the new image? [yN]y
Recreating ba7e3da04296_closetbrewsapp_webservice_1 ... done
admins-Mac-mini-3:closetbrewsapp admin$ 
 

Сбой вызова curl, поскольку служба никогда не запускается. Он не отображается, когда я выполняю docker ps.

В журналах через Docker Desktop я обнаружил это сообщение об ошибке:

 Attaching to closetbrewsapp_webservice_1

webservice_1 |

webservice_1 | > docker-express@1.0.0 start /usr/src/app

webservice_1 | > node server.js

webservice_1 |

webservice_1 | module.js:338

webservice_1 | throw err;

webservice_1 | ^

webservice_1 | Error: Cannot find module 'express'
 

Я не уверен, что я делаю неправильно.

Ответ №1:

неправильная версия узла. найдите из docker hub нужную версию
FROM node:12
docker hub: https://hub.docker.com/_/node /

узел: https://nodejs.org/en/docs/guides/nodejs-docker-webapp /

Комментарии:

1. но почему это работает, когда я делаю это без docker-compose? Разве это не должно также завершаться сбоем только при использовании подхода Dockerfile?

2. может быть изменен путь, который вы записали в cli. не используйте. для пути используйте $ {PWD}

3. вы не должны монтировать папку code. образы docker не должны хранить данные. если вы запустите 5 одинаковых изображений, это проблема с файлом. просто смонтируйте папку db или папку с загруженными файлами