Dockerfile 卷:本地更改未反映在 docker 中
Dockerfile volume: local changes are not reflected in docker
我正在使用 docker-compose 创建一个多容器环境,其中我有一个 mongodb 实例和两个 python 应用程序。我在本地更改文件时遇到问题,但 docker-compose up
并未反映我在文件中所做的更改。我做错了什么?
我的项目结构:
.
├── docker-compose.yml
├── form
│ ├── app.py
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── static
│ └── templates
│ ├── form_action.html
│ └── form_sumbit.html
├── notify
│ ├── app.py
│ ├── Dockerfile
│ ├── requirements.txt
└── README
两个应用程序的 Dockerfile 非常相似。下面给出一个:
FROM python:2.7
ADD . /notify
WORKDIR /notify
RUN pip install -r requirements.txt
这是我的 docker-compose.yml 文件:
version: '3'
services:
db:
image: mongo:3.0.2
container_name: mongo
networks:
db_net:
ipv4_address: 172.16.1.1
web:
build: form
command: python -u app.py
ports:
- "5000:5000"
volumes:
- form:/form
environment:
MONGODB_HOST: 172.16.1.1
networks:
db_net:
ipv4_address: 172.16.1.2
notification:
build: notify
command: python -u app.py
volumes:
- notify:/notify
environment:
MONGODB_HOST: 172.16.1.1
networks:
db_net:
ipv4_address: 172.16.1.3
networks:
db_net:
external: true
volumes:
form:
notify:
这是我对 docker volume ps
的输出:
local form
local healthcarereminder_form
local healthcarereminder_notify
local notify
[我目前的理解:可以看到form和notify有两个实例,其中一个附加了项目文件夹名称。所以 docker 可能正在寻找不同文件中的更改。我不确定。]
如果您尝试在 docker-compose 文件中挂载主机目录,请不要将 notify
声明为 VOLUME 指令。
而是像本地文件夹一样对待它
notification:
build: notify
command: python -u app.py
volumes:
# this points to a relative ./notify directory.
- ./notify:/notify
environment:
....
volumes:
form:
#do not declare the volume here.
# notify:
当您在 docker-compose 文件的底部声明一个 VOLUME 节点时,docker 会创建一个特殊的内部目录,以便在 docker 个图像之间共享。这里有更多详细信息:https://docs.docker.com/engine/tutorials/dockervolumes/#add-a-data-volume
我正在使用 docker-compose 创建一个多容器环境,其中我有一个 mongodb 实例和两个 python 应用程序。我在本地更改文件时遇到问题,但 docker-compose up
并未反映我在文件中所做的更改。我做错了什么?
我的项目结构:
.
├── docker-compose.yml
├── form
│ ├── app.py
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── static
│ └── templates
│ ├── form_action.html
│ └── form_sumbit.html
├── notify
│ ├── app.py
│ ├── Dockerfile
│ ├── requirements.txt
└── README
两个应用程序的 Dockerfile 非常相似。下面给出一个:
FROM python:2.7
ADD . /notify
WORKDIR /notify
RUN pip install -r requirements.txt
这是我的 docker-compose.yml 文件:
version: '3'
services:
db:
image: mongo:3.0.2
container_name: mongo
networks:
db_net:
ipv4_address: 172.16.1.1
web:
build: form
command: python -u app.py
ports:
- "5000:5000"
volumes:
- form:/form
environment:
MONGODB_HOST: 172.16.1.1
networks:
db_net:
ipv4_address: 172.16.1.2
notification:
build: notify
command: python -u app.py
volumes:
- notify:/notify
environment:
MONGODB_HOST: 172.16.1.1
networks:
db_net:
ipv4_address: 172.16.1.3
networks:
db_net:
external: true
volumes:
form:
notify:
这是我对 docker volume ps
的输出:
local form
local healthcarereminder_form
local healthcarereminder_notify
local notify
[我目前的理解:可以看到form和notify有两个实例,其中一个附加了项目文件夹名称。所以 docker 可能正在寻找不同文件中的更改。我不确定。]
如果您尝试在 docker-compose 文件中挂载主机目录,请不要将 notify
声明为 VOLUME 指令。
而是像本地文件夹一样对待它
notification:
build: notify
command: python -u app.py
volumes:
# this points to a relative ./notify directory.
- ./notify:/notify
environment:
....
volumes:
form:
#do not declare the volume here.
# notify:
当您在 docker-compose 文件的底部声明一个 VOLUME 节点时,docker 会创建一个特殊的内部目录,以便在 docker 个图像之间共享。这里有更多详细信息:https://docs.docker.com/engine/tutorials/dockervolumes/#add-a-data-volume