我有一个开发环境,我是dockerizing,我希望能够重新生成我的更改,而无需重建docker镜像.我正在使用docker compose,因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器
我有两个容器定义docker-compose.yml:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Run Code Online (Sandbox Code Playgroud)
我已经在我的node应用程序的dockerfile中添加了一个卷,但是如何在卷中安装主机的目录,以便我对代码的所有实时编辑都反映在容器中?
这是我当前的Dockerfile:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN …Run Code Online (Sandbox Code Playgroud) 下面的示例创建dbdata命名卷并在db服务中引用它:
version: '2'
services:
db:
image: mysql
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
driver: local
Run Code Online (Sandbox Code Playgroud)
我可以看到卷的路径默认为:
/ var/lib/docker/volumes/project_name _dbdata
我的问题是如何在主机上为dbdata卷配置路径.
这个问题来自Docker的存储库中的一个问题:
https //github.com/docker/compose/issues/942
我无法弄清楚如何使用docker compose创建数据容器(没有进程正在运行).
为什么我会收到此错误? __CODE__
我的docker-compose文件几乎与此相同:https://docs.docker.com/compose/wordpress/
version: '2'
services:
wordpress:
image: wordpress:latest
restart: always
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_HOST: 3306
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- maria_volume: /var/lib/mysql
volumes:
maria_volume: ~/mariadb
Run Code Online (Sandbox Code Playgroud) 我有以下示例
version: '2'
services:
proxy:
container_name: proxy
hostname: proxy
image: nginx
ports:
- 80:80
- 443:443
volumes:
- proxy_conf:/etc/nginx
- proxy_htdocs:/usr/share/nginx/html
volumes:
proxy_conf: {}
proxy_htdocs: {}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.当我运行docker-compose up它时,创建那些命名的卷/var/lib/docker/volumes,一切都很好.但是,从主机,我只能/var/lib/docker以root身份访问,因为它root:root(有意义).我想知道是否有一种方法可以chown将主机的目录更加明智/安全(比如,我用来在主机上做大部分工作的相对无特权的用户),或者我是否只需要chown手动操作它们.我已经开始有许多脚本可以解决其他问题了,所以有一个额外的几行不会有太大的问题,但我真的想保持自编自动化最小化,如果我可以 - 减少愚蠢错误的机会.
顺便说一句,没有:如果我挂载主机目录而不是创建卷,它们会被覆盖,这意味着如果它们开始为空,它们将保持为空,并且我没有从容器内部获得默认配置(或其他任何内容).
额外点:我可以将卷移到更方便的位置吗?说,/home/myuser/myserverstuff/volumes?
需要澄清这里的评论:
绑定挂载的唯一“问题”是它不会自动将容器内容复制到主机,这与命名卷不同。docs.docker.com/compose/compose-file/#volumes
这准确吗?如果是,那么:
bind mount当使用(在容器重新启动时保留数据)时,如何将容器的“新数据”(例如不断增长的数据库)获取到主机中?named volumes?