我当前的docker-compose.yml
档案:
version: '2'
services:
app:
restart: always
build: ./web
ports:
- "8000:8000"
volumes:
- ./web:/app/web
command: /usr/local/bin/gunicorn -w 3 -b :8000 project:create_app()
environment:
FLASK_APP: project/__init__.py
depends_on:
- db
working_dir: /app/web
db:
image: postgres:9.6-alpine
restart: always
volumes:
- dbvolume:/var/lib/postgresql/data
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: app
volumes:
dbvolume:
我现在正在尝试创建一个覆盖以前文件进行测试的docker-compose-test.yml
文件。我想到的是用这个:
version: '2'
services:
app:
command: pytest
db:
volumes:
- dbtestvolume:/var/lib/postgresql/data
volumes:
dbtestvolume:
然后使用以下命令运行测试:
docker-compose -f docker-compose.yml -f docker-compose-test.yml run --rm app
据我所知,应该只覆盖与用于开发的docker文件相比的不同方面,即使用的命令和存储数据的数据量。
该命令被成功覆盖,但遗憾的是数据量保持不变,因此如果我运行测试,我的应用程序数据将被覆盖。
这是为测试设置docker配置的正确方法吗?关于出了什么问题的任何建议?
如果这不是正确的方法,设置docker-compose配置进行测试的正确方法是什么?
我尝试更改我的docker-compose-test.yml
文件以使用其他服务(db-test
)进行测试:
version: '2'
services:
app:
command: pytest
depends_on:
- db-test
db-test:
image: postgres:9.6-alpine
restart: always
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: app
现在发生的事情是,在运行我的测试时,我的数据没有被覆盖(因此,在某种程度上,它可以工作,欢呼!)但是如果我尝试运行命令:
docker-compose down
我得到了这个输出:
Stopping app_app_1 ... done
Stopping app_db_1 ... done
Found orphan containers (app_db-test_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
然后docker-compose down
失败。所以没有正确配置。
有什么想法吗?
答案 0 :(得分:2)
如果您不想保留数据库数据,请不要使用卷,因此每次启动容器时都会有一个新数据库。
我猜你的表中需要一些预先填充的数据,所以只需构建一个复制所需数据的新数据库图像。 Docker文件可能类似于:
FROM postgres:9.6-alpine
COPY db-data/ /var/lib/postgresql/data
如果您需要更新数据,请使用db-data/
安装-v
,更改并重建图片。