我正在尝试使用.NET Core和Angular在dev容器内运行项目。
.NET Core项目在此容器中运行没有问题,但是Angular项目出现了一些问题。
当我在vscode中手动启动终端时,转到Angular项目目录,然后运行npm run ng serve
-一切正常。
但是,我试图在task.json中定义任务,这使我可以运行相同的命令-存在错误。
这是我的Dockerfile specyfing开发容器:
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
ARG DOTNETCORE_VERSION=2.1
FROM mcr.microsoft.com/dotnet/core/sdk:${DOTNETCORE_VERSION}
# This Dockerfile adds a non-root 'vscode' user with sudo access. However,for Linux,# this user's GID/UID must match your local user UID/GID to avoid permission issues
# with bind mounts. Update USER_UID / USER_GID if yours is not 1000. See
# https://aka.ms/vscode-remote/containers/non-root-user for details.
ARG username=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
# [Optional] Version of Node.js to install.
ARG INSTALL_NODE="true"
ARG NODE_VERSION="lts/*"
ENV NVM_DIR=/home/vscode/.nvm
# [Optional] Install the Azure CLI
ARG INSTALL_AZURE_CLI="false"
# Avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# Configure apt and install packages
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \
#
# Verify git,process tools,lsb-release (common in install instructions for CLIs) installed
&& apt-get -y install git iproute2 procps apt-transport-https gnupg2 curl lsb-release \
#
# Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user.
&& groupadd --gid $USER_GID $username \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $username \
# [Optional] Add sudo support for the non-root user
&& apt-get install -y sudo \
&& echo $username ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$username\
&& chmod 0440 /etc/sudoers.d/$username \
#
# [Optional] Install Node.js for ASP.NET Core Web Applicationss
&& if [ "$INSTALL_NODE" = "true" ]; then \
#
# Install nvm and Node
mkdir ${NVM_DIR} \
&& curl -so- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash 2>&1 \
&& chown -R vscode:vscode ${NVM_DIR} \
&& /bin/bash -c "source $NVM_DIR/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm alias default ${NODE_VERSION}" 2>&1 \
&& INIT_STRING='[ -s "$NVM_DIR/nvm.sh" ] && \\. "$NVM_DIR/nvm.sh" && [ -s "$NVM_DIR/bash_completion" ] && \\. "$NVM_DIR/bash_completion"' \
&& echo $INIT_STRING >> /home/vscode/.bashrc \
&& echo $INIT_STRING >> /home/vscode/.zshrc \
&& echo $INIT_STRING >> /root/.zshrc; \
#
fi \
#
# [Optional] Install the Azure CLI
&& if [ "$INSTALL_AZURE_CLI" = "true" ]; then \
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/azure-cli.list \
&& curl -sL https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 2>/dev/null \
&& apt-get update \
&& apt-get install -y azure-cli; \
fi \
#
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=
这是我的devcontainer.json
{
"name": "Docker in Docker Compose","dockerComposeFile": "docker-compose.yml","appPort": [
5000,5001,5005,4200
],"service": "docker-in-docker","workspaceFolder": "/workspace","settings": {
"terminal.integrated.shell.linux": "/bin/bash","remote.extensionKind": {
"ms-azuretools.vscode-docker": "workspace"
},"mssql.connections": [
{
"server": "sql.data","database": "","authenticationType": "SqlLogin","user": "sa","password": "Pass@word!","emptyPasswordInput": false,"savePassword": true
}
]
},"extensions": [
"ms-azuretools.vscode-docker","ms-mssql.mssql","ms-vscode.csharp","cyrilletuzi.angular-schematics","dbaeumer.vscode-eslint","ms-vscode.vscode-typescript-tslint-plugin","pmneo.tsimporter","eg2.vscode-npm-script"
]
}
和launch.json
{
"version": "2.0.0","tasks": [
{
"label": "build","command": "dotnet","type": "process","args": [
"build","${workspaceFolder}/TaskManager/TaskManager.sln","/property:GenerateFullPaths=true","/consoleloggerparameters:NoSummary"
],"problemMatcher": "$msCompile"
},{
"type": "npm","label": "angular testing","script": "start"
}
]
}
启动带有标签“ build”的任务成功。 标签为“角度测试”的启动任务会导致:
> Executing task: npm run start <
/bin/bash: npm: command not found
The terminal process terminated with exit code: 127
我也尝试过测试任务定义:
"type": "shell","command": "which","args": [
"npm"
]
}
此结果与
> Executing task: which npm <
The terminal process terminated with exit code: 1
在vs代码中运行终端“ bash”并测试npm版本:
root@43f83c4b3ce5:/workspace# npm version
{
npm: '6.12.0',...
}
看起来不错。
如何定义在此dev容器内成功运行npm命令的任务?