DevContainer中postCreateCommand设为poetry install时Git用户信息丢失问题
Dev Container中poetry install作为postCreateCommand导致Git用户信息为空的问题
问题描述
- 将
.devcontainer/devcontainer.json中的postCreateCommand设置为poetry install后,Git的user.name和user.email为空,代码提交失败 - 移除该命令后,Git配置正常,可正常提交代码
- 容器启动后手动在IDE终端执行
poetry install,不会出现Git配置为空的问题
相关配置文件
.devcontainer/devcontainer.json
{ "name": "${localWorkspaceFolderBasename}", "build": { "dockerfile": "Dockerfile" }, "postCreateCommand": "poetry install", // 存在问题的行 "customizations": { "vscode": { "extensions": [ "ms-python.python", "njpwerner.autodocstring", "tamasfe.even-better-toml", "ms-azuretools.vscode-docker" ] } } }
.devcontainer/Dockerfile
FROM mcr.microsoft.com/devcontainers/base:jammy ARG DEBIAN_FRONTEND=noninteractive ARG USER=vscode RUN DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get upgrade -y \ && apt-get install -y build-essential --no-install-recommends make \ ca-certificates \ git \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libreadline-dev \ libsqlite3-dev \ wget \ curl \ llvm \ libncurses5-dev \ xz-utils \ tk-dev \ libxml2-dev \ libxmlsec1-dev \ libffi-dev \ liblzma-dev \ libgl1-mesa-dev # Python and poetry installation USER $USER ARG HOME="/home/$USER" ARG PYTHON_VERSION=3.11 ENV PYENV_ROOT="${HOME}/.pyenv" ENV PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${HOME}/.local/bin:$PATH" RUN echo "done 0" \ && curl https://pyenv.run | bash \ && echo "done 1" \ && pyenv install ${PYTHON_VERSION} \ && echo "done 2" \ && pyenv global ${PYTHON_VERSION} \ && echo "done 3" \ && curl -sSL https://install.python-poetry.org | python3 - \ && poetry config virtualenvs.in-project true \ && poetry config virtualenvs.create false \ && poetry config virtualenvs.prefer-active-python true
原因分析
核心差异在于命令的执行环境与时机:
postCreateCommand的执行上下文
postCreateCommand是在容器创建完成后、用户交互式会话启动前,以非交互式shell执行的。此时VS Code Dev Container扩展还未完成宿主Git用户信息到容器的同步(比如复制宿主.gitconfig到容器用户目录),同时非交互式shell不会加载用户的shell配置文件(如~/.bashrc),导致Git无法读取到用户配置。如果后续提交操作依赖该命令执行后的环境,就会出现配置为空的问题。手动执行的上下文
进入IDE终端后是交互式shell,此时Dev Container扩展已经完成Git用户信息同步,同时加载了用户shell配置,Git可以正常读取user.name和user.email,因此手动执行poetry install不会影响提交。移除postCreateCommand的情况
移除该命令后,Dev Container有足够时间完成Git配置同步,后续提交操作时配置已存在,因此可以正常提交。
可选解决方案
- 让
postCreateCommand以交互式shell执行,强制加载配置:bash -lc "poetry install" - 在
postCreateCommand中手动设置Git配置:git config --global user.name "你的用户名" && git config --global user.email "你的邮箱" && poetry install
内容的提问来源于stack exchange,提问作者Kitamado
相关产品推荐
相关产品推荐

