在docker中只写入源文件的可写node_modules
我的webapp/Dockerfile
看起来像这样:
FROM project_base-container EXPOSE 9100 # ... # Using copy instead of mount, since we need to write in sub-directories like node_modules etc. COPY . /usr/src/app/webapp CMD ["bash", "webapp/scripts/build_and_run.sh", "setup_deps_and_run_app"]
我想让应用程序能够读取源代码,并写入到像node_modules
这样的子文件夹中,但是我不希望这些更改来自我的本地机器。 因此,我有两个select:
- 在
node install
更改--prefix='/tmp'
,并将srcnode install
为ro
- 复制src,然后容器可以写任何想要的地方。
解决scheme1破坏浩劫,因为现在我必须复制/链接像package.json,index.html等所有文件的前缀位置。 解决scheme2就是我上面所做的。
当我使用COPY时,一切都很好。 但是现在的问题是,在源代码发生变化之后,我想每次更新映像中的源代码:
sudo docker-compose down && sudo docker-compose up --build -d
但是COPY命令是由dockercaching的,即使在文件改变之后也不会被更新。
TL; DR:我有一个src文件夹'webapp',我想从主机挂载为readonly,但我的应用程序想写入子文件夹'webapp / node_modules'。
要在只读安装中创build可写安装,您需要确保只读目录具有安装点(文件夹),即使它们是空的也是如此 。
要创build空的挂载点并提交它们,请看这个答案 。
对于运行节点,您需要以下4个文件夹可写:
$ mkdir webapp/frontend/node_modules webapp/frontend/build webapp/frontend/.config webapp/frontend/.npm $ cat > webapp/frontend/node_modules/.gitignore # Ignore everything in this directory * # Except this file !.gitignore $ git add -f webapp/frontend/node_modules/.gitignore $ cat docker-compose.yml # Filtered output below version: "2" services: webapp: build: ./webapp expose: - "9900" # Named volumes, defined below. volumes: - ./webapp:/usr/src/app/webapp:ro - webapp_config:/usr/src/app/webapp/frontend/.config:rw - webapp_npm:/usr/src/app/webapp/frontend/.npm:rw - webapp_node_modules:/usr/src/app/webapp/frontend/node_modules:rw - webapp_build:/usr/src/app/webapp/frontend/build:rw - ./config.ini:/usr/src/app/config.ini:ro # Named volumes. These will stay in the host, but not in the current directory. volumes: webapp_node_modules: webapp_build: webapp_config: webapp_npm:
- 相关的答案关于在只读装载可写文件夹
- 在Docker中查看这个文档了解不同的卷/存储选项
- 相关的问题
您可以使用内部泊坞窗。
version: "3" services: postgres: image: postgres:9.4 volumes: - db-data:/var/lib/db redis: image: redis ports: - "6379:6379" volumes: - ./data:/data volumes: db-data:
从文档
阐释:
Postgress服务使用一个命名卷,它位于docker安装目录中。 对于Ubuntu,它是/var/lib/docker/aufs/
。 这个目录可能是不同的,可以通过使用docker inspect <vulume_name>
来find。
Redis服务使用另一种types的卷,这些卷更受欢迎,用于将主机目录挂载到容器目录中。 data
文件夹与docker-compose.yml文件所在的目录位于同一目录中,并且此文件夹安装在容器的/data
。
是否有可能将所有可编辑的代码存储在某个子目录中(比如说src
)? 如果是,那么你可以做到以下几点
- 像现在这样使用
COPY
,这可能是部署所需要的。 - 另外(只读)在开发过程
/usr/src/app/webapp/src
挂载到/usr/src/app/webapp/src
。
- docker工人:如何检索文件(由scrapy-splash创build)
- 链接子域到Laravel应用程序使用Docker / Docker-compose在centos 6 vps上
- 如何使用ES Docker镜像部署由多个主机组成的Elastic Search群集?
- 在容器中安装Docker,供GitLab CI构build使用
- 如何在AWS EC2 Windows Server实例上构buildDocker镜像?
- 如何使用docker在本地设置heroku应用程序?
- 由于“未经授权:需要身份validation”,使用gitlab,docker push失败
- 用作卷path的docker-compose环境variables不会得到解决
- 有没有办法在boot2docker上下文中为Docker的卷装载复制pwd?