Docker 容器无法联系我的本地主机



我最近安装了 docker 工具箱,并创建了一个名为"superawesomecontainer2"的新容器来训练海豚,每次我运行这个容器时,我都必须重新安装我的 package.json,如果我使用 -p 3001:3001 所以我可以在 localhost 上运行我的服务器,它只是不起作用,每当我关闭这个容器并重新运行它时, 我必须重新安装我的package.json,然后它将无法到达我的本地主机?

我试图解决这个问题的一些狗屎 -在该容器内删除我的包-look.json -干净的现金 --力量 -重新安装我的软件包 - 重新安装码头工人 IT 自己

我的包.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:UsersC.MDesktopsmart-barin-api
COPY ./ ./
RUN npm install
CMD ["/bin/bash"]

码头工人信息

E:javascriptfacerecognitionapi>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

预期:我的服务器在本地主机 3001 上运行 我不会在每次运行此容器时重新安装我的包

我在你的Dockerfile中看到几个问题.

  • WORKDIR:指容器内的目录结构。所以它不应该包含类似 Windows 的路径,而是类似WORKDIR /app的东西。
  • COPY:由于您将当前文件夹中的所有文件复制到目标文件夹,因此必须至少包含与DockerFile相同的文件夹:index.jspackage.json
  • EXPOSE:您必须公开容器中运行的服务器的端口,这是通过EXPOSE指令完成的。例如EXPOSE 8000.然后,您必须在运行容器-p 8000:8000时映射端口。根据您的需要或配置更改端口。
  • CMD:包含将在容器开始时执行的命令。如果它包含/bin/bash它将执行一个 shell,如果您不在交互模式下运行它,则退出。所以你必须开始类似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/

如果您也可以在此处查看示例。

最新更新