我正在设置docker容器以将我的前端资产与npm和Webpack捆绑在一起。我想为此目的使用轻量级的Docker映像。来自https://hub.docker.com/_/alpine的图像是否带有npm?
我拥有的docker-compose.yml文件中
npm run bundle
期望import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators'; // make sure to import the map operator
@Injectable({
providedIn: 'root'
})
export class RecipiService {
jsons: any;
url = '/assets/resource.json';
//json:any;
constructor(private http:HttpClient) {}
getData(){
let data: Observable<any> = this.http.get(this.url);
data.subscribe(results =>{
// console.log(this.jsons);
return this.jsons = results;
})
}
getDetails(id){
return this.http.get(this.url)
.pipe(map(response) => {
return response.find((item) => (item.id === id));
})
}
成功运行
我知道了 错误:资产无法启动服务资产:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“ exec:\“ npm \”:在$ PATH中找不到可执行文件“:未知
答案 0 :(得分:1)
在docker中,Alpine linux被设计为最小的基本映像,以保持较小的映像大小并减少其攻击面。像nodejs
这样的附加软件(包含npm
)需要像apk add nodejs
这样的手动安装using corresponding apk packages。也许需要先使用apk update
更新软件包。
您可以轻松编写一个Dockerfile
并将其添加为RUN
语句。但是首选的方法是在docker hub中搜索适合您需要的现有图像。在npm的情况下,您会发现一个official nodejs image,您只需在其中使用目标nodejs版本的标签(例如10-*
)来获取最新的lts。
在这里,您可以选择其他基础图像。以lts为例,您可以使用10-jessie
或所需的内容:10-alpine
。这只有24mb,而10-stretch
则需要346mb的存储空间。
要使用它,请将image: alpine:3.9.2
文件中的image: node: 10-alpine
更改为docker-compose.yml
。