【发布时间】:2018-12-28 01:43:27
【问题描述】:
我有一个项目,目录结构如下:
docker-compose.yml
project1/
--Dockerfile
--docker-compose-entry.sh
project2/
--Dockerfile
--docker-compose-entry.sh
project3/
--Dockerfile
--docker-compose-entry.sh
我的docker-compose-entry.sh 文件在容器启动时创建并写入一些文件。但这又做了一件奇怪的事情。当他们在他们的容器中写入文件时,他们也会将文件写入我本地的原始目录。
我希望文件在启动时写入容器中并留在容器中而不触及我的实际目录。生成的文件应该随着容器被破坏而被破坏。
有没有人建议如何做到这一点?任何想法都将受到高度赞赏。
更新以下是我在 cmets 中要求的文件内容:
# docker-compose.yml
version: '2'
services:
project1:
restart: always
build: ./project1
image: project1
command: gunicorn project1.wsgi -b 0.0.0.0:8000
volumes:
- ./project1:/project1
- ./common:/project1/common
expose:
- "8000"
depends_on:
- db
project2:
restart: always
build: ./project2
image: project2
command: gunicorn project2.wsgi -b 0.0.0.0:8000
volumes:
- ./project2:/project2
- ./common:/project2/common
expose:
- "8000"
depends_on:
- db
project3:
restart: always
build: ./project3
image: project3
command: gunicorn project3.wsgi -b 0.0.0.0:8000
volumes:
- ./project3:/project3
- ./common:/project3/common
expose:
- "8000"
depends_on:
- db
db:
image: postgres
restart: always
ports:
- "5432:5432"
volumes:
- data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: sacrina
volumes:
data:
这是我在 project1 中的 Dockerfile 示例。
#Dockerfile
FROM wildfish/django:node-latest
RUN mkdir /project1
WORKDIR /project1
ADD . /project1
ADD requirements.txt /project1/
ADD ./common/.bowerrc /project1/
ADD ./common/bower.json /project1/
ADD ./common/package.json /project1/
ADD ./common/gulpfile.js /project1/
ADD ./config/ /project1/
RUN pip install -r /project1/requirements.txt
RUN npm install --global bower gulp-cli
COPY ./docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entry-point.sh
ENTRYPOINT ["docker-entry-point.sh"]
这是我的 docker-entry-point.sh 的示例
# docker-entry-point.sh
#!/bin/sh
npm install
bower install
gulp
python manage.py collectstatic --no-input
gunicorn project1.wsgi -b 0.0.0.0:8000
【问题讨论】:
-
您想要的行为是 docker 的工作方式,除非您正在写入从主机挂载的目录。
-
扩展@Paulpro,如果你包含你的shell脚本的内容,我们可能会告诉你为什么你得到本地副本(安装?)
-
...以及(尤其是)
docker-compose.yml文件的内容。 -
@DavidMaze 我已经用我的文件内容更新了我的问题。
-
@sshussain270 删除卷挂载,写入将发生在容器内而不是您的主机上。
标签: linux bash docker docker-compose