Sal*_*uri 19 data-containers docker docker-compose
我是docker的新手,使用docker compose开发项目.从文档中我了解到我应该使用仅数据容器来保持数据持久性但我无法使用docker-compose这样做.每当我这样做时,docker-compose down它会从db中删除数据,但是docker-compose stop不会删除数据.可能是因为我没有创建命名数据量并且docker-compose down几乎不删除所有容器.所以我尝试命名容器,但它给我带来了错误.请看看我的yml档案:
version: '2'
services:
data_container:
build: ./data
#volumes:
# - dataVolume:/data
db:
build: ./db
ports:
- "5445:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=postgres
# - PGDATA=/var/lib/postgresql/data/pgdata
volumes_from:
# - container:db_bus
- data_container
geoserver:
build: ./geoserver
depends_on:
- db
ports:
- "8004:8080"
volumes:
- ./geoserver/data:/opt/geoserverdata_dir
web:
build: ./web
volumes:
- ./web:/code
ports:
- "8000:8000"
depends_on:
- db
command: python manage.py runserver 0.0.0.0:8000
nginx:
build: ./nginx
ports:
- "83:80"
depends_on:
- web
Run Code Online (Sandbox Code Playgroud)
data_container的Docker文件是:
FROM stackbrew/busybox:latest
MAINTAINER Tom Offermann <tom@offermann.us>
# Create data directory
RUN mkdir /data
# Create /data volume
VOLUME /data
Run Code Online (Sandbox Code Playgroud)
我试过这个但是通过做docker-compose down,数据就丢失了.我尝试命名data_container,因为你可以看到注释行,它告诉我这个错误:
ERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.
Run Code Online (Sandbox Code Playgroud)
所以我现在正在做的是创建一个仅限于数据的独立数据容器并将其放在volumes_from数据库的值中.它工作正常,即使在完成后也没有删除任何数据docker-compose down.
我的疑问:
制作docker-compose能够使用并正确使用数据库的数据的容器的最佳方法是什么?
我有意识地不同意我选择的方法,即通过创建一个独立的数据容器.有什么想法吗?
luk*_*aus 20
docker-compose down
做以下事情
停止容器并删除由up创建的容器,网络,卷和图像
因此,您正在经历的行为是预期的.
docker-compose stop用于关闭使用docker-compose文件创建但不删除其卷的容器.
其次,你不需要data-containerdocker compose版本2中的模式.所以删除它,然后使用
db:
...
volumes:
- /var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
docker-compose down停止容器但也删除它们(包括所有内容:networks,...).
请改用docker-compose stop.
我认为使用docker-compose创建可以存储数据库数据的容器的最佳方法是使用命名卷:
version: '2'
services:
db: #https://hub.docker.com/_/mysql/
image: mysql
volumes:
- "wp-db:/var/lib/mysql:rw"
env_file:
- "./conf/db/mysql.env"
volumes:
wp-db: {}
Run Code Online (Sandbox Code Playgroud)
在这里,它将创建一个名为"wp-db"的命名卷(如果它不存在)并将其挂载在/ var/lib/mysql中(在读写模式下,默认值).这是数据库存储其数据的位置(对于mysql映像).
如果指定的卷已存在,则将在不创建它的情况下使用它.
启动时,mysql图像会查看/ var/lib/mysql(您的卷)中是否有数据库以便使用它们.
您可以在此处获取有关docker-compose文件参考的更多信息:https: //docs.docker.com/compose/compose-file/#/volumes-volume-driver
| 归档时间: |
|
| 查看次数: |
19881 次 |
| 最近记录: |