Docker-контейнер не может связаться с моим локальным хостом - PullRequest
0 голосов
/ 08 июня 2019

Недавно я установил набор инструментов Docker и создал новый контейнер с именем «superawesomecontainer2» для обучения porpuses, и каждый раз, когда я запускаю этот контейнер, мне приходится переустанавливать свой package.json, и если я использовал -p 3001: 3001, чтобы я могзапустить мой сервер на локальном хосте, он просто не работает, и всякий раз, когда я закрываю этот контейнер и перезапускаю его, мне приходится переустанавливать свой package.json, и тогда он не достигает моего локального хоста?

некоторые дерьмо, которые я пытался решить эту проблему - убрать мой пакет-look.json из этого контейнера -чистые деньги --force -re-переустановить мои пакеты -реустановить докер самостоятельно

my package.json

{
  "name": "facerecognitionapi",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "^1.18.3",
    "clarifai": "^2.8.0",
    "cors": "^2.8.4",
    "dotenv": "^8.0.0",
    "express": "^4.16.3",
    "knex": "^0.15.1",
    "pg": "^7.4.3"
  },
  "devDependencies": {
    "nodemon": "^1.17.5"
  }
}

мой файл докера

FROM node:10.16.0

WORKDIR C:\Users\C.M\Desktop\smart-barin-api

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]

информация о докере

E:\javascript\facerecognitionapi>docker info
Containers: 38
 Running: 0
 Paused: 0
 Stopped: 38
Images: 51
Server Version: 18.09.6
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.14.116-boot2docker
Operating System: Boot2Docker 18.09.6 (TCL 8.2.1)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 989.4MiB
Name: default
ID: LRFB:QJNW:CCDA:2Y7X:XZWB:FREX:O4JB:D7PN:KWDK:ACPH:B6FC:Y4KY
Docker Root Dir: /mnt/sda1/var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
 provider=virtualbox
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

ожидайте: мой сервер работает на localhost 3001-установите мои пакеты каждый раз, когда я запускаю этот контейнер

1 Ответ

0 голосов
/ 08 июня 2019

Я вижу несколько проблем в вашем Dockerfile.

  • WORKDIR: относится к структуре каталогов внутри контейнера. Таким образом, он не должен содержать Windows-подобный путь, а что-то вроде WORKDIR /app.
  • COPY: поскольку вы копируете все файлы в текущей папке в папку назначения, вы должны включить как минимум в ту же папку, что и DockerFile: index.js и package.json .
  • EXPOSE: вам нужно указать порт вашего сервера, работающего в контейнере, это делается с помощью директивы EXPOSE. Например EXPOSE 8000. Затем вы должны сопоставить порт при запуске контейнера -p 8000:8000. Измените порт в соответствии с вашими потребностями или вашей конфигурацией.
  • CMD: содержит команду, которая будет выполнена в начале контейнера. Если он содержит /bin/bash, он выполнит оболочку и просто выйдет, если вы не запустите его в интерактивном режиме. Таким образом, вы должны начать что-то вроде CMD ["npm", "start"]

В заключение ваш Dockerfile должен больше выглядеть следующим образом.

FROM node:10.16.0
# create and go to the app dir
WORKDIR /app
# copy all local file to the app dir
COPY ./ ./
# install the app
RUN ["npm", "install"]
# tell docker what port to expose
EXPOSE 8000
# start the server
CMD ["npm", "start"]

И вы должны построить и запустить его так:

$ docker build -t mynodeapp:latest .
$ docker run -p 8000:8000 mynodeapp:latest

# ...
# Server listening at http://127.0.0.1:8000/

Если вы также можете проверить пример здесь .

...