我能够设置 Dockerfile使用默认的 ENV 变量,然后我可以在运行我的 docker 容器时配置这些变量,例如在 Dockerfile 中,我有以下几行:
ENV USERNAME ropensci
ENV EMAIL ropensci@github.com
RUN git config --global user.name $USERNAME
RUN git config --global user.email $EMAIL
太棒了。当我启动交互式 session 时:
docker run -it --env USERNAME="Carl" --env EMAIL=cboettig@example.com myimage /bin/bash
然后我可以发出命令 git config --list
并看到 git 配置为使用我在命令行上提供的值而不是默认值。
但是,我的Dockerfile还配置为运行一个 RStudio 服务器,然后我可以在守护进程模式下运行图像时在浏览器中登录:
docker run -d -p 8787:8787 --env USERNAME="Carl" --env EMAIL=cboettig@example.com cboettig/ropensci-docker
我转到 localhost:8787 并登录到 RStudio,一切都按预期工作,启动了一个启用了 git 的新“项目”,但是 RStudio 找不到我的 git 名称和电子邮件。我可以从 RStudio 菜单打开 shell 并运行 git config --list
或 echo $USERNAME
,我只得到一个空白值。为什么这适用于/bin/bash 但不适用于 RStudio,我该如何解决?
最佳答案
你的 git 配置是在/.gitconfig 上设置的。此配置文件适用于 root 用户。您需要为 rstudio 用户设置 git 配置,因为 rstudio 在 rstudio 用户上运行。以下命令是一个临时解决方案。
docker run -it -p 8787:8787 --env USERNAME="Carl" --env EMAIL=cboettig@example.com cboettig/ropensci-docker bash -c "cp /.gitconfig /home/rstudio; /usr/bin/supervisord"
有效!
另一种解决方案是编写基于 cboettig/ropensci-docker 的 Dockerfile。以下是示例 Dockerfile。
FROM cboettig/ropensci-docker
RUN cp /.gitconfig /home/rstudio
CMD ["/usr/bin/supervisord"]
关于r - 在运行 RStudio 的守护进程 Docker 中使用 ENV 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335333/