You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

运行步骤

  1. 确保当前目录下存在hello.c、Dockerfile、reload.sh、docker-compose.yml四个文件
  2. 构建并启动容器:
docker-compose up --build
  1. 测试热重载:修改本地的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:18:27