docker compose up --build
docker compose up --build 是一个 Docker Compose 命令,用于 构建并启动 多容器应用程序。让我详细解释每个部分:
命令分解:
1. docker compose
- Docker Compose 工具的命令
- 用于管理多容器 Docker 应用
- 新版语法(V2),旧版是
docker-compose(带横线)
2. up
- 启动服务
- 创建并启动 docker-compose.yml 中定义的所有容器
- 如果没有容器存在,会自动创建
- 如果容器已存在,会重启它们
3. --build
- 重新构建镜像
- 在启动前强制重新构建 Docker 镜像
- 即使镜像已存在,也会重新构建
- 确保使用最新的代码和配置
完整功能:
docker compose up --build
相当于执行:
- 构建:读取 Dockerfile,构建新的 Docker 镜像
- 创建:基于镜像创建容器
- 启动:启动所有容器
- 连接网络:设置容器间网络
- 挂载卷:设置数据卷
- 端口映射:映射主机端口到容器端口
- 日志输出:在前台显示所有容器日志
工作流程:
docker compose up --build
↓
1. 读取 docker-compose.yml
↓
2. 为每个服务的 build 配置
- 找到 Dockerfile
- 重新构建镜像
- 标记为最新版本
↓
3. 创建并启动容器
- web 容器(基于新构建的镜像)
- redis 容器(从 Docker Hub 拉取)
↓
4. 设置网络连接
- 创建默认网络
- web 容器能通过主机名 "redis" 访问 Redis
↓
5. 启动服务
- 运行容器内的命令
- 显示日志到终端
实际例子:
# docker-compose.yml
services:
web:
build: . # 从当前目录的 Dockerfile 构建
ports:
- "5000:5000" # 主机:容器端口映射
db:
image: postgres # 使用现有镜像
environment:
POSTGRES_PASSWORD: secret
运行:
docker compose up --build
相关命令对比:
| 命令 | 功能 | 是否构建 | 是否启动 |
|---|---|---|---|
docker compose up |
启动服务 | ❌ 不构建 | ✅ 启动 |
docker compose up --build |
构建并启动 | ✅ 重新构建 | ✅ 启动 |
docker compose build |
只构建不启动 | ✅ 构建 | ❌ 不启动 |
docker compose start |
启动已存在的容器 | ❌ 不构建 | ✅ 启动 |
常用选项:
# 后台运行(分离模式)
docker compose up --build -d
# 强制重建并启动
docker compose up --build --force-recreate
# 只构建特定服务
docker compose up --build web # 只构建和启动 web 服务
# 排除特定服务
docker compose up --build --no-deps redis # 启动 redis 但不启动依赖服务
在您项目中的具体作用:
对于您的 Flask + Redis 项目:
docker compose up --build
会:
-
构建 Web 镜像:
- 基于
Dockerfile构建 Python Flask 应用镜像 - 安装
requirements.txt中的依赖 - 复制
f.py到容器中
- 基于
-
启动两个容器:
- web 容器:运行 Flask 应用(端口 15000→5000)
- redis 容器:运行 Redis 数据库
-
连接它们:
- Flask 应用可以通过
redis://redis:6379连接到 Redis - 访问
http://localhost:15000可以看到应用
- Flask 应用可以通过
常见使用场景:
# 开发时:每次代码变更后
docker compose up --build
# 部署时:确保使用最新代码
docker compose up --build -d
# 调试时:查看构建和启动过程
docker compose up --build --verbose
这就是为什么在您之前的操作中,这个命令会尝试:
- 下载 Python 基础镜像
- 构建包含 Flask 和 Redis 客户端的应用镜像
- 拉取 Redis 镜像
- 启动两个容器并连接它们
运行docker compose up --build

[root@s22 docker-compose-files]#docker compose up --build
[+] Building 11.1s (11/11) FINISHED docker:default
=> [web internal] load build definition from flaskdockerfile 0.0s
=> => transferring dockerfile: 254B 0.0s
=> [web internal] load metadata for docker.io/library/python:3.11-alpine 1.8s
=> [web auth] library/python:pull token for registry-1.docker.io 0.0s
=> [web internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [web 1/5] FROM docker.io/library/python:3.11-alpine@sha256:d174db33fa506083fbd941b265f7bae699e7c338c77c415f85dddff4f176d1de 0.0s
=> [web internal] load build context 0.0s
=> => transferring context: 61B 0.0s
=> CACHED [web 2/5] WORKDIR /app 0.0s
=> CACHED [web 3/5] COPY requirements.txt . 0.0s
=> [web 4/5] RUN pip install --no-cache-dir -r requirements.txt 8.8s
=> [web 5/5] COPY f.py . 0.2s
=> [web] exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:be88783424ece19b4faa55e09d07310d2bb431a9f8752c9031be91baa013ec16 0.0s
=> => naming to docker.io/library/docker-compose-files-web 0.0s
[+] Running 2/2
✔ Container docker-compose-files-redis-1 Created 0.2s
✔ Container docker-compose-files-web-1 Created 0.1s
Attaching to redis-1, web-1
redis-1 | 1:C 09 Dec 2025 13:20:38.560 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis-1 | 1:C 09 Dec 2025 13:20:38.560 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis-1 | 1:C 09 Dec 2025 13:20:38.560 * Redis version=7.4.7, bits=64, commit=00000000, modified=0, pid=1, just started
redis-1 | 1:C 09 Dec 2025 13:20:38.560 * Configuration loaded
redis-1 | 1:M 09 Dec 2025 13:20:38.560 * monotonic clock: POSIX clock_gettime
redis-1 | 1:M 09 Dec 2025 13:20:38.561 * Running mode=standalone, port=6379.
redis-1 | 1:M 09 Dec 2025 13:20:38.561 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * Server initialized
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * Reading RDB base file on AOF loading...
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * Loading RDB produced by version 7.4.7
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * RDB age 405 seconds
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * RDB memory usage when created 0.90 Mb
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * RDB is base AOF
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * Done loading RDB, keys loaded: 0, keys expired: 0.
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * DB loaded from append only file: 0.001 seconds
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
redis-1 | 1:M 09 Dec 2025 13:20:38.567 * Ready to accept connections tcp
web-1 | * Serving Flask app 'f'
web-1 | * Debug mode: off
web-1 | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
web-1 | * Running on all addresses (0.0.0.0)
web-1 | * Running on http://127.0.0.1:5000
web-1 | * Running on http://172.20.0.3:5000
web-1 | Press CTRL+C to quit
主机浏览器访问http://192.168.30.142:15000/



浙公网安备 33010602011771号