Jos*_*ett 16 docker-compose visual-studio-code vscode-remote vscode-devcontainer
我正在尝试将远程容器与我的docker-compose.yaml
.
但是,我的撰写文件正在利用变量替换功能。
services:
command: yarn server
environment:
MONGO_URI: mongodb://database:27017/todo
ports:
- ${SERVER_PORT}:3000
- ${SERVER_DEBUG_PORT}:9320
Run Code Online (Sandbox Code Playgroud)
Makefile
通常,我从包装docker-compose
我运行以启动开发环境的命令的变量中设置这些变量。
docker-compose
?我尝试initializeCommand
通过以下方式使用它。
devcontainer.json
"initializeCommand": ". ./env.sh"
Run Code Online (Sandbox Code Playgroud)
"initializeCommand": "source env.sh"
Run Code Online (Sandbox Code Playgroud)
我也尝试remoteEnv
在devcontainer.json
.
我也尝试过设置settings.terminal.integrated.env.linux
。
似乎不可能将在initializeCommand中创建的env作为env变量传递给docker build命令。我的解决方案是在initializeCommand中创建一个env文件,并将其与构建上下文一起传递。
这是 .devcontainer/devcontainer.json
{
"build": {
"dockerfile": "Dockerfile",
"args": {
"USERNAME": "${localEnv:USER}"
}
},
"initializeCommand": "echo -e \"USERNAME=$USER\nUSER_UID=$(id -u $USER)\nGROUPNAME=$(id -gn $USER)\nGROUP_GID=$(id -g $USER)\" > .devcontainer/.env"
}
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中
FROM xxx
ARG USERNAME=user
USER root
# Copy the .env file to the container
COPY .env /tmp/.env
# Source to use it
RUN source /tmp/.env && rm /tmp/.env && \
if getent passwd $USERNAME; then userdel -f $USERNAME; fi && \
if getent group $GROUPNAME; then groupdel $GROUPNAME; fi && \
if getent group $GROUP_GID; then TMP_NAME=$(getent group $GROUP_GID | cut -d: -f1); groupdel $TMP_NAME; fi; \
groupadd --gid $GROUP_GID $GROUPNAME && \
useradd --uid $USER_UID --gid $GROUP_GID -m $USERNAME && \
echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME && \
chmod 0440 /etc/sudoers.d/$USERNAME && \
chown $(eval echo ~$USERNAME) && \
chmod 755 $(eval echo ~$USERNAME)
USER $USERNAME
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4975 次 |
最近记录: |