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 runredis-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