docker - 保存后如何使本地更改反映在 docker 容器中
问题描述
我正在尝试使用 docker,但我仍在设置我的开发环境。我正在尝试以一种可以将更改保存在主机上并将它们传播到容器的方式来设置我的容器。
我想通过使用volume
我将我的本地 ./code 目录安装到容器中。我希望通过这样做,我可以运行docker-compose up
、开发、保存并将这些更改推送到容器中。虽然保存后我没有看到我的更改反映在应用程序中,直到我杀死它并docker-compose up
再次运行。我是否使用了正确的概念?或者这对docker有可能吗?
Dockerfile
FROM node:10.13-alpine
ENV NODE_ENV production
# RUN mkdir /code
WORKDIR /code
码头工人-compose.yml
version: '2.1'
services:
express-docker-test:
build: code
# command: npm install --production --silent && mv node_modules ../
volumes:
- E:\git\express-docker-test\code\:/code/
environment:
NODE_ENV: production
expose:
- "3000"
ports:
- "3000:3000"
command: npm start
这是我正在试验的一个测试仓库。如果可以的话,我会喜欢它,通过这个 repo 运行docker-compose up
. 然后对响应进行编辑说从
- Hello world!!!
+ Hello World.
然后能够刷新 localhost:3000 并看到新的响应。
由于。。。导致的结果docker inspect express-docker-test_express-docker-test
[
{
"Id": "sha256:791e8fbd5c871af53a37f5e9f5058e423f8ddf914b09f21ff1d80a40ea4f142f",
"RepoTags": [
"express-docker-test_express-docker-test:latest"
],
"RepoDigests": [],
"Parent": "sha256:e87553281ff90e49977fb6166c70c0e5ebf7bb98f0ae06468d7883dc0314c606",
"Comment": "",
"Created": "2019-07-14T19:15:47.1174538Z",
"Container": "8426c3db78c23c1cfc594c500ce77adf81ddd43ca52ca58456ba5b49ec60fee9",
"ContainerConfig": {
"Hostname": "8426c3db78c2",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=10.13.0",
"YARN_VERSION=1.10.1",
"NODE_ENV=production"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) WORKDIR /code"
],
"ArgsEscaped": true,
"Image": "sha256:e87553281ff90e49977fb6166c70c0e5ebf7bb98f0ae06468d7883dc0314c606",
"Volumes": null,
"WorkingDir": "/code",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "18.09.2",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NODE_VERSION=10.13.0",
"YARN_VERSION=1.10.1",
"NODE_ENV=production"
],
"Cmd": [
"node"
],
"ArgsEscaped": true,
"Image": "sha256:e87553281ff90e49977fb6166c70c0e5ebf7bb98f0ae06468d7883dc0314c606",
"Volumes": null,
"WorkingDir": "/code",
"Entrypoint": null,
"OnBuild": [],
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 70255071,
"VirtualSize": 70255071,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/8a0293f507ec80f68197b3bcb49b12e1a61c08f122a8a85060ab2d766d881a93/diff:/var/lib/docker/overlay2/a159e965ecf6e91533397def52fb1b3aef900c9793f933dc5120eed2381a37f4/diff:/var/lib/docker/overlay2/49f6493daf037bc88f9fb474ae71e36f13b58224082ff1f28ee367c795207c8d/diff",
"MergedDir": "/var/lib/docker/overlay2/9c4a3691e175f15585034acf7146ce5601f9e9d9c9cb60023bd348172116ae5c/merged",
"UpperDir": "/var/lib/docker/overlay2/9c4a3691e175f15585034acf7146ce5601f9e9d9c9cb60023bd348172116ae5c/diff",
"WorkDir": "/var/lib/docker/overlay2/9c4a3691e175f15585034acf7146ce5601f9e9d9c9cb60023bd348172116ae5c/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:df64d3292fd6194b7865d7326af5255db6d81e9df29f48adde61a918fbd8c332",
"sha256:387bc77dd3f21547b74752dd03f6018b5d750684c832c39cd239704052ce366e",
"sha256:2faeaaebb1134fe62e2cc1603a761301e281c04a8e2e36ff2ac1005f7c06780f",
"sha256:dfb2bf93a77a1907921d8f1622e831fa31c924c6c612e593b8937f95e42a0afa"
]
},
"Metadata": {
"LastTagTime": "2019-07-14T19:31:00.4646905Z"
}
}
]
解决方案
不要RUN mkdir /code
在 Dockerfile 中。
如果您将本地目录挂载到/code
中,那么您的 Dockerfile 应该只是期望它存在(已由docker run ...
--volume=` 或由 Docker Compose 挂载。
离开WORKDIR /code
。
我认为坐骑必须是绝对路径,但如果./code
那样的话,你很好。
推荐阅读
- perl - 使用带有多个管道进程的 Perl system() 检测错误
- python - 在“dataflowrunner”工作人员上安装 kubectl
- javascript - 如何在小数点后 2 位停止 Javascript 数学输出并清除旧输出?
- ssh - Gitlab:带有公钥的ssh要求输入密码
- apache-kafka-streams - 有没有办法根据大小刷新 Kafka Streams WindowStore?
- excel - Excel VBA粘贴修改后的值而不是原始值
- regex - sed string 如果部分字符串匹配,则替换整个单词,但不影响字符串后面的单词
- laravel - 如何在 Laravel Eloquent 中将集合或对象转换为数组
- javascript - 如何确定滚动时是否传递了元素?
- javascript - 从 react-web3-provider 访问 web3 属性