tas*_*f99 3 django docker docker-compose
问题
嗨,我是 Docker 新手。我想在 Django 项目中使用.dockerignore忽略一些文件和目录。一开始没有忽略任何文件,后来在stackoverflow中搜索发现是因为docker-compose.yml中的卷的原因,所以我把它注释掉了。但现在有些文件和目录被忽略,但有些则没有(pycache、 db.sqlite3 )。我遇到了很多问题,但找不到任何解决方案。
项目结构
-src
--coreapp
---migrations
---__init__.py
---__pycache__
---admin.py
---apps.py
---models.py
---tests.py
---views.py
---tests.py
--admin.json
--db.sqlite3
--manage.py
-.dockerignore
-.gitignore
-docker-compose.yml
-Dockerfile
-Procfile
-README.md
-requirements.txt
-runtime.txt
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM python:3.7
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /code/requirements.txt
RUN pip install -r /code/requirements.txt
COPY . /code/
WORKDIR /code/
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '3'
services:
db:
image: postgres
web:
build: .
command: bash -c "python src/manage.py runserver 0.0.0.0:8000"
# volumes:
# - .:/code
ports:
- "8000:8000"
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
.dockerignore
# Byte-compiled / optimized / DLL files
__pycache__/
**/migrations
src/media
src/db.sqlite3
Procfile
.git
Run Code Online (Sandbox Code Playgroud)
命令
# build image
sudo docker-compose up --build
# to enter container
sudo docker exec -it [container id] bash
# to check ignored files inside the container
ls
Run Code Online (Sandbox Code Playgroud)
预期产出
# Byte-compiled / optimized / DLL files
__pycache__/ # ignored
**/migrations # ignored
src/media # ignored
src/db.sqlite3 # ignored
Procfile # ignored
.git # ignored
Run Code Online (Sandbox Code Playgroud)
原始输出
# Byte-compiled / optimized / DLL files
__pycache__/ # NOT ignored
**/migrations # ignored
src/media # ignored
src/db.sqlite3 # NOT ignored
Procfile # ignored
.git # ignored
Run Code Online (Sandbox Code Playgroud)
尝试
__pycache__/
**/__pycache__
**/*__pycache__
**/*__pycache__*
**/*__pycache__/
**/__pycache__/
*/db.sqlite3
db.sqlite3
Run Code Online (Sandbox Code Playgroud)
该.dockerignore文件仅影响 Dockerfile 行中复制到映像中的文件COPY(从技术上讲,构建上下文中包含哪些文件)。这并不意味着这些文件永远不会存在于映像或容器中,只是它们不包含在初始副本中。
您应该能够通过查看docker build输出来验证这一点。每一步之后都会有一行类似---> 0123456789ab; 这些十六进制数字是有效的 Docker 映像 ID。找到该步骤之后立即创建的图像COPY并运行
docker run --rm 0123456789ab ls
Run Code Online (Sandbox Code Playgroud)
如果您稍微探索一下这种方式,您应该会看到__pycache__容器中的目录要么完全不存在,要么与主机不同。
在您提到的具体文件中,该db.sqlite3文件是您实际应用程序的数据库,它将在您启动应用程序时创建;这就是为什么当您docker exec进入正在运行的容器时您会看到它,但当您docker run进入图像中的干净容器时却看不到它。 什么是 __pycache__?澄清了 Python 解释器每当执行语句时都会自行创建该目录import,因此该目录也会自行重新出现也就不足为奇了。
| 归档时间: |
|
| 查看次数: |
5595 次 |
| 最近记录: |