docker 的 daemon.json 不支持设置容器默认工作目录,该目录由镜像构建时的 workdir 指令或运行时 -w 参数指定;daemon.json 仅管理守护进程级全局配置,不干预容器运行时上下文。
docker 的 daemon.json 不提供设置容器默认工作目录(即 workdir)的配置项。
容器内部的默认工作目录由镜像本身决定,是在构建镜像时通过 Dockerfile 中的 WORKDIR 指令指定的。Docker 守护进程(dockerd)在运行容器时不会、也不能通过 daemon.json 统一覆盖或修改每个容器的初始工作目录。
为什么 daemon.json 里没有这个选项?
-
daemon.json控制的是 守护进程级行为:存储路径、网络、日志、镜像源、运行时参数等全局策略; - 而容器的工作目录属于 镜像/容器运行时上下文,是用户在构建镜像或运行容器时显式声明的(如
docker run -w /app ...或Dockerfile中的WORKDIR),不属于守护进程统一管理范畴。
如果你希望“所有容器默认进入某个目录”,有以下可行方式:
-
✅ 构建镜像时固定
WORKDIR
在Dockerfile开头或关键位置写:WORKDIR /workspace
所有基于该镜像启动的容器都会以此为默认工作目录。
-
✅ 运行容器时用
-w参数指定docker run -w /data myimage bash
✅ 在容器启动脚本中自动
cd
例如把ENTRYPOINT ["sh", "-c", "cd /mywork && exec \"$@\"", "_"]加入镜像,再接原命令。❌ 不要尝试在
daemon.json里加workdir、default-workdir等字段 —— 这些字段不存在、不被识别、会导致配置加载失败。
补充提醒
-
daemon.json是标准 JSON,不支持注释,语法错误会让dockerd启动失败; - 修改后必须执行:
sudo systemctl daemon-reload sudo systemctl restart docker
- 常见误配项(如
workdir,cwd,default-dir)均无效,官方文档也未定义此类字段。
不复杂但容易忽略:容器工作目录不是守护进程管的,而是镜像和运行命令共同决定的。











