docker-撰写没有卷的服务
docker-compose service without a volume
我在 docker-compose.yml
文件中有一个像这样定义的 redis 服务:
redis:
container_name: redis
image: redis
ports:
- "6379:6379"
如您所见,此处未定义卷。 Redis 数据库会在调用 docker run
/ docker-compose run
之间持续存在吗?当我使用 docker run
和 redis-cli
时,我可以在数据库中看到一些数据,所以我很好奇它来自哪里。
这里可能会发生一些事情。
如果您重复 运行 docker-compose up -d
,它将努力使现有容器保持活动状态。如果你在一个普通的开发周期中重复docker-compose stop app; docker-compose up --build -d
,这只会重启已经停止的容器,所以在这个序列中数据库容器永远不会被停止和删除;您将拥有相同的数据库容器。
发生的第二件事是 Redis Dockerfile 声明 VOLUME /data
. If you don't specify anything else for that directory with a volumes:
declaration, Docker creates an anonymous volume for that directory. Docker Compose will keep track of these, and the anonymous volume will stay associated with the specific service until you explicitly docker-compose down -v
or you restart the service with docker-compose up --renew-anon-volumes
。
我在 docker-compose.yml
文件中有一个像这样定义的 redis 服务:
redis:
container_name: redis
image: redis
ports:
- "6379:6379"
如您所见,此处未定义卷。 Redis 数据库会在调用 docker run
/ docker-compose run
之间持续存在吗?当我使用 docker run
和 redis-cli
时,我可以在数据库中看到一些数据,所以我很好奇它来自哪里。
这里可能会发生一些事情。
如果您重复 运行 docker-compose up -d
,它将努力使现有容器保持活动状态。如果你在一个普通的开发周期中重复docker-compose stop app; docker-compose up --build -d
,这只会重启已经停止的容器,所以在这个序列中数据库容器永远不会被停止和删除;您将拥有相同的数据库容器。
发生的第二件事是 Redis Dockerfile 声明 VOLUME /data
. If you don't specify anything else for that directory with a volumes:
declaration, Docker creates an anonymous volume for that directory. Docker Compose will keep track of these, and the anonymous volume will stay associated with the specific service until you explicitly docker-compose down -v
or you restart the service with docker-compose up --renew-anon-volumes
。