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   # 开发模式,支持热重载

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

相关推荐
DarkAthena4 小时前
wslc ps 卡死的排查:一次「停容器不停 VM」引发的连环故障
docker
小沈同学呀5 小时前
【Agent开发第十五期】部署上线:把 Alex 搬进浏览器,15 期全栈串联收官
docker·agent·从零搭建ai助手
lwx9148525 小时前
Docker-安装SSH服务
docker·容器·ssh
时间售卖铺10 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
tedcloud12313 小时前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage14 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo14 小时前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
todoitbo1 天前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
是枚小菜鸡儿吖1 天前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
螺蛳粉 螺蛳粉1 天前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver