我有一个 docker compose 文件,它有 2 个服务
redis
& web
:
version: "3.8"
services:
redis:
image: redis:7.2.4-alpine
container_name: redis_web_dev
env_file:
- ../../.env.development
restart: always
ports:
- 6379:6379
command: redis-server --save 60 1 --loglevel warning --requirepass 123abc
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 30s
retries: 50
volumes:
- redis_data:/data
web:
image: nextjs-sqlite:0.0.1
build:
context: ../../
dockerfile: docker/production/Dockerfile
target: development
container_name: web_dev
env_file:
- ../../.env.development
ports:
- 3000:3000
volumes:
# - .:/app
- ../../data:/data
restart: unless-stopped
depends_on:
redis:
condition: service_healthy
command: sh -c "sh ./scripts/run.sh"
volumes:
redis_data:
driver: local
我只想构建
redis
,所以我使用:
docker compose -f docker/development/docker-compose.yml build redis
但它没有显示任何输出或错误。它只是关闭终端。
如果我运行
web
,它会给出一些输出并开始构建:
docker compose -f docker/development/docker-compose.yml build web
有什么问题吗?
web
取决于 redis
,但不是相反,所以它应该有效,但事实并非如此。
目前,我正在构建整个东西:
docker compose -f docker/development/docker-compose.yml build
然后只开始
redis
:
docker compose -f docker/development/docker-compose.yml up -d redis
这非常有效。
但我很好奇我应该这样做吗?或者是否可以从
redis
构建 docker-compose.yml
然后启动它?
正如 Teemu 在评论中所说,redis 使用现有映像,因此无需构建任何内容,退出是预期的行为。
我可以直接运行
docker compose -f docker/development/docker-compose.yml up -d redis
来启动 Redis 服务器,其中 redis
是我的服务名称。无需提前构建。