如何在C语言项目中使用Docker Compose实现隔离环境与热重载?
Docker 配合C语言项目实现隔离开发与热重载
修复现有Dockerfile问题
你提供的Dockerfile存在两个关键问题:
CMD指令使用了中文全角引号,会导致容器启动失败,需替换为半角引号RUN编译是镜像构建阶段执行的操作,无法实现代码修改后的自动重载,必须改为运行时动态编译
支持热重载的Dockerfile
FROM gcc:latest WORKDIR /app # 安装文件变化监听工具inotify-tools RUN apt-get update && apt-get install -y inotify-tools --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # 复制热重载脚本到容器 COPY reload.sh /app/reload.sh RUN chmod +x /app/reload.sh CMD ["./reload.sh"]
热重载脚本 reload.sh
#!/bin/bash # 首次编译并启动程序 compile_and_run() { gcc -o app hello.c ./app & } # 启动初始进程 compile_and_run # 监听hello.c文件的修改、创建、删除事件,触发重新编译 inotifywait -m -e modify,create,delete ./hello.c | while read -r events; do echo "Detected file change, recompiling..." # 终止旧进程并重启 pkill -f "./app" || true compile_and_run done
Docker Compose 配置文件 docker-compose.yml
version: '3.8' services: c-dev: build: . # 挂载本地代码目录到容器,实现文件实时同步 volumes: - ./:/app # 开启交互式终端,支持scanf获取用户输入 stdin_open: true tty: true
运行步骤
- 确保当前目录下存在
hello.c、Dockerfile、reload.sh、docker-compose.yml四个文件 - 构建并启动容器:
docker-compose up --build
- 测试热重载:修改本地的
hello.c并保存,容器会自动重新编译并运行新版本程序,你可以在终端输入数字验证功能
简化版(无需热重载)
如果只需要隔离环境运行程序,可使用以下简化配置:
简化Dockerfile
FROM gcc:latest WORKDIR /app COPY . /app RUN gcc -o app hello.c CMD ["./app"]
简化docker-compose.yml
version: '3.8' services: c-app: build: . stdin_open: true tty: true
运行命令依然是docker-compose up --build
内容的提问来源于stack exchange,提问作者Ramon Jales
相关产品推荐
相关产品推荐

