VS Code和Docker Desktop -参考Dockerfile和postCreate安装中的项目文件夹

hgncfbus  于 2023-05-28  发布在  Docker
关注(0)|答案(1)|浏览(129)

当我从VS Code启动容器时,它会获得自己的工作区文件夹,例如。/workspaces/d2。我可以在Dockerfile的RUN命令中引用工作区路径吗?我将有一些需要在子目录中完成的构建步骤。
我尝试设置一个环境变量PROJECT,这部分工作。
我的简单示例文件是:devcontainer.json:

{
  "name": "test",
  "context": "..",
  "dockerFile": "./Dockerfile",

   "build": {
    "args": {
      "PROJECT": "${containerWorkspaceFolder}"
    }
  }
}

Dockerfile:

FROM --platform=linux/amd64 ubuntu:22.04
# LABEL org.opencontainers.image.authors="steve@espops.com"

# Pass in the current project workspace directory, which VS Code establishes
ARG PROJECT

RUN apt-get update && apt-get install -y git
RUN echo ${PROJECT} >out.txt
pwd
/workspaces/d2

cat /out.txt 
/workspaces/d2

但是,当我在该文件夹中添加构建指令时,我收到错误消息,说它不存在。
这可以通过以下方式看到:

ENV PROJECT=${PROJECT}
RUN echo $PROJECT >out.txt
RUN bash -c ls -l $PROJECT >>out.txt

文件out.txt显示了预期的变量值,但ls显示的是/的内容,而不是项目文件夹,在所有初始化完成后,项目文件夹在交互式shell中正确显示。
Dockerfile可以等待VS Code创建这些文件夹吗?或者它总是必须在VS Code创建它们之前完成?

nlejzf6q

nlejzf6q1#

简短回答:no. Dockerfile必须完成,然后VS Code初始化其扩展等。
然而,我发现了一种使用VSCode postCreateCommand的方法(见这里)也提到了here
devcontainer.json中,添加:

"postCreateCommand": "./post_create.sh"

使用+x权限在项目的主文件夹中创建脚本,例如
post_create.sh:

#!/bin/sh
echo Building Go plugin:
cd auth-plugin-go && go build -buildmode c-shared -o auth.so auth.go && cd ..

在容器重建时,在其他步骤完成后,脚本将在终端窗口中运行。

不管.sh文件的开头是否有任何shebang,看起来总是会得到sh shell,因此您可能希望在postCreateCommand属性的开头调用bash

相关问题