把一个 Node.js web 应用程序给 Docker 化文档
介绍文档
1、 下载Docker Desktop:下载链接 2、 而后启动docker
3、 新建项目,在文件夹中新建Dockerfile
和.dockerignore
4、 建立镜像:docker build –t {镜像名} .
(不能忽略后面的.
)
5、 运行容器:docker run –it {镜像名}
退出容器:exit
启动后,浏览器无法访问容器里的服务
未解决
example中
修改代码里的host:127.0.0.1 –> 0.0.0.0 解决!
Vue-cli后的项目,启动了仍无法访问:
Logs没有报错
修改host:localhost改为0.0.0.0
执行命令:docker run -p 8872:8080 -d gjw1516/docker-vuecli-example --mount type=bind,source=/src,target=/src
报以下信息:
Error response from daemon: OCI runtime create failed: container_linux.go:344: starting
container process caused “exec: “–mount”: executable file not found in $PATH”: unknown.
解决:添加/bin/bash
,命令为:docker run -p 8872:8080 -d gjw1516/docker-vuecli-example /bin/bash --mount type=bind,source=/src,target=/src
但是执行后,没有报错,但是docker ps没有起来服务。
问题原因:https://www.jianshu.com/p/f1e7a1630c64 因此问题解决方法不是添加/bin/bash
解决,而是调换—mount的位置,命令为:
docker run -d -it --mount type=bind,source=/src,target=/src -p 8879:8080 gjw1516/docker-vuecli-example
但是更改目录下的文件,仍无法同步
挂载本地地址应为绝对路径,并且共享该路径:
1、 打开docker设置Settings
2、 切换到Shared Drives点击Reset credentials重置
3、 选中要共享的磁盘,应用后可能需要输入本机用户的密码
4、 修改命令中共享的本地路径,如:
docker run -d -it --mount type=bind,source=f:/work/docker/myProject/docker-vuecli-example/src,target=/src -p 8879:8080 gjw1516/docker-vuecli-example
本地src文件夹下新增文件后使用docker exec -it {containerID} /bin/bash
发现期望的src路径下没有新增的文件。后来发现在Dockerfile
中设置了容器的工作路径为:
WORKDIR /project/example
因此挂载的话需要挂载到容器对应的文件夹路径中,如:
docker run -d -it --mount type=bind,source=f:/work/docker/myProject/docker-vuecli-example/src,target=/project/example/src -p 8879:8080 gjw1516/docker-vuecli-example
The command ‘/bin/sh -c npm install’ returned a non-zero code: 1
报错可能是node版本不正确,修改node版本
安装vue-cli报错:
Unexpected end of JSON input while parsing near ‘…precated"},“1.0.4”:{"’
解决:npm cache clean –force
然后重新执行npm install