docker配置入门知识

1. ${NODE_ENV:-production} 语法解释

这是Docker Compose的环境变量替换语法:

  • ${NODE_ENV:-production} 表示:如果环境变量 NODE_ENV 存在且不为空,则使用 NODE_ENV 的值;否则使用默认值 production
  • :- 是默认值操作符
  • 等价于:NODE_ENV=${NODE_ENV:-production}

示例:

bash 复制代码
# 如果 .env 文件中有 NODE_ENV=development
# 则实际值为 development

# 如果 .env 文件中没有 NODE_ENV 或为空
# 则使用默认值 production

2. Docker服务重启和更新

Docker不会自动监听文件变化,需要手动重启:

修改docker-compose.yaml后:

bash 复制代码
# 停止所有服务
docker-compose down

# 重新构建并启动
docker-compose up --build -d

# 或者只重启特定服务
docker-compose restart app

修改Dockerfile后:

bash 复制代码
# 强制重新构建镜像
docker-compose build --no-cache app

# 然后启动
docker-compose up -d

修改应用代码后(如果使用卷挂载):

bash 复制代码
# 代码修改会自动同步到容器,但需要重启应用进程
docker-compose restart app

# 或者进入容器手动重启
docker-compose exec app pnpm run start:dev

3. restart: unless-stopped 含义

这是Docker容器的重启策略:

策略 说明
no 不自动重启(默认)
always 总是重启,无论退出状态如何
on-failure 只在非零退出状态时重启
unless-stopped 总是重启,除非手动停止

unless-stopped 的优势:

  • 容器异常退出时自动重启
  • 系统重启后自动启动容器
  • 手动停止后不会自动重启(避免干扰调试)

4. 完整的重启流程示例

bash 复制代码
# 1. 停止所有服务
docker-compose down

# 2. 查看当前状态
docker-compose ps

# 3. 重新构建并启动
docker-compose up --build -d

# 4. 查看日志
docker-compose logs -f app

# 5. 检查服务状态
docker-compose ps

5. 开发环境建议

对于开发环境,建议使用卷挂载来避免频繁重建:

yaml 复制代码
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app                    # 代码同步
      - /app/node_modules         # 避免覆盖依赖
    command: pnpm run start:dev   # 开发模式,支持热重载

这样代码修改后,只需要重启应用进程,不需要重新构建镜像。

相关推荐
学不完的8 分钟前
Docker数据卷管理及优化
运维·docker·容器·eureka
hansaes3 小时前
第一章:容器到底是什么
docker
Sst的头号粉丝4 小时前
Docker——compose
运维·docker·容器
ZZZKKKRTSAE5 小时前
rhel9快速上手Docker
运维·docker·容器
筱顾大牛6 小时前
Docker安装教程(加汉化!超详细!!!)
运维·docker·容器
九成宫6 小时前
安装和配置Docker教程(装在其他盘)
运维·docker·容器
janthinasnail6 小时前
使用Docker安装nanobot(超轻量个人AI助手)
docker·容器
喵喵爱自由8 小时前
Docker容器共享宿主机-安全网络
网络·安全·docker
杨浦老苏8 小时前
搜索引擎聚合器Degoog
搜索引擎·docker·群晖
Mr_Chenph10 小时前
OpenClaw 3.13 Skill编写初探(Docker)
docker·skill·openclaw