Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在容器中部署angular应用程序无法运行ng命令_Angular_Docker - Fatal编程技术网

在容器中部署angular应用程序无法运行ng命令

在容器中部署angular应用程序无法运行ng命令,angular,docker,Angular,Docker,我试图在docker容器中使用google cloud运行我的angular应用程序。我尝试了一些不同的dockerfile方法,但我还没有成功地让我的应用程序运行 FROM node:10-alpine as build-step RUN mkdir -p /app WORKDIR /app COPY package.json /app RUN npm install RUN npm install -g @angular/cli COPY . /app RUN npm run build

我试图在docker容器中使用google cloud运行我的angular应用程序。我尝试了一些不同的dockerfile方法,但我还没有成功地让我的应用程序运行

FROM node:10-alpine as build-step

RUN mkdir -p /app
WORKDIR /app
COPY package.json /app
RUN npm install
RUN npm install -g @angular/cli
COPY . /app
RUN npm run build --prod

# Stage 2
FROM nginx:1-alpine
COPY --from=build-step /app/ /usr/share/nginx/html
这种方法似乎可以正确地构建它,但它无法启动容器,过了一段时间它就超时了。“serve命令需要在Angular项目中运行,但找不到项目定义。”这对我来说似乎很奇怪,因为我确实在容器中安装了Angular/cli。"

然后我提出了自己更简单的方法:

FROM node:12.19.0
WORKDIR /
COPY package*.json ./
RUN npm install    
RUN npm install -g @angular/cli
COPY . .
CMD npm start
此操作失败,错误为“错误:(gcloud.run.services.update)云运行错误:容器启动失败。无法在端口环境变量定义的端口上启动并侦听。此修订版的日志可能包含更多信息。”

我对google cloud run和docker container都是新手,所以我想这可能是我在这里错过的非常简单和明显的东西

谢谢

编辑

package.json

{
  "name": "LunchTime",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "start-proxy": " --proxy-config proxy.conf.json",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular-devkit/schematics": "^10.1.7",
    "@angular/animations": "^10.1.6",
    "@angular/common": "^10.1.6",
    "@angular/compiler": "^10.1.6",
    "@angular/core": "^10.1.6",
    "@angular/forms": "^10.1.6",
    "@angular/localize": "^10.1.6",
    "@angular/platform-browser": "^10.1.6",
    "@angular/platform-browser-dynamic": "^10.1.6",
    "@angular/router": "^10.1.6",
    "@nativescript/angular": "^10.1.7",
    "@ng-bootstrap/ng-bootstrap": "^7.0.0",
    "bootstrap": "^4.5.3",
    "core-js": "^2.6.11",
    "masonry-layout": "^4.2.2",
    "moment": "^2.29.1",
    "ngx-bootstrap": "^6.1.0",
    "ngx-masonry": "^10.0.6",
    "node": "^14.14.0",
    "rxjs": "^6.6.3",
    "sweetalert2": "^10.6.1",
    "tslib": "^1.14.1",
    "zone.js": "^0.10.3"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.1001.7",
    "@angular/cli": "^10.1.7",
    "@angular/compiler-cli": "^10.1.6",
    "@angular/language-service": "^10.1.6",
    "@nativescript/schematics": "^10.1.0",
    "@types/jasmine": "~2.5.53",
    "@types/jasminewd2": "^2.0.8",
    "@types/node": "^6.14.13",
    "codelyzer": "~3.2.0",
    "jasmine-core": "~2.6.2",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "^3.1.4",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^1.4.3",
    "karma-jasmine": "^1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.4",
    "ts-node": "~3.2.0",
    "tslint": "~5.7.0",
    "typescript": "~4.0.3"
  }
}

我不认为这是一个与谷歌云相关的问题

您说映像是构建的,但运行时错误很奇怪,因为从Nginx的角度来看,它不知道它所服务的文件来自Angular。因此,首先,我要检查映像是否确实正确创建。换句话说,由于您达到第2阶段,Angular不再存在


关于端口环境变量的第二个错误可能是其他人已经在侦听该端口。

我可能在您的第一个
Dockerfile
中发现了您的问题。您将Workdir设置为
/app
,然后将所有文件(
package.json
)复制到
/app

COPY
是相对于
WORKDIR
的,因此您的最终路径将是
/app/app/
。也许您没有意识到这一点?因为在您的
包.json
中,您没有将目录更改为
/app
。请检查此项:

与docker一起使用angular的其他注意事项

  • 对于自动化环境,如测试平台、持续集成和部署,请使用
    npm ci
    而不是
    npm install
    。有关原因和方式的更多信息
  • 我不知道您是否需要
    单独运行npm install-g@angular/cli
    。仅对于Docker start,您不需要此功能。也许您可以尝试一下并给我一些反馈。:)
  • 如果您需要
    WORKDIR
    您不需要
    运行mkdir-p/app
    。WORKDIR会自动执行
因此Dockerfile应该是这样的:

FROM node:10-alpine as build-step

WORKDIR /app
COPY package.json .
RUN npm ci
COPY . .
RUN npm run build --prod

# Stage 2
FROM nginx:1-alpine
COPY --from=build-step /app/ /usr/share/nginx/html

编辑:删除了
运行mkdir-p/app
。原因请参见注释。

嗨!你能分享你的
软件包吗?json
请?当然可以@nclskfm!谢谢你的帮助:)在你的初始Dockerfile中,它不应该在容器启动时运行
ng
命令;它会从接收
CMD
de>nginximage您正在从中启动并使用捆绑的内置应用程序启动nginx。如何启动容器?步骤4/8:运行在68a66917e56d npm ERR中运行的npm ci-->!cipm只能安装带有现有包的包-lock.json或带有lockfileVersion>=1的npm-shrinkwrap.json。使用运行安装npm@5或以后生成它,然后再试一次。我确实有一个package-lock.json。我需要更新我的节点版本吗?我改为运行npm I,因为它工作了,然后它生成了,但我在最后一步超时。“步骤2—“部署”:状态:为gcr.io/google.com/cloudsdktool/cloud sdk下载了更新的图像:最新步骤2—“部署”:gcr.io/google.com/cloudsdktool/cloud sdk:最新超时错误:超出上下文截止日期“嗯,我不熟悉谷歌云。
Dockerfile
现在是否可以在本地工作?
COPY
的右侧遵循正常的Unix路径规则:像
/app
这样的绝对路径是映像内的绝对路径,像
这样的相对路径是相对于当前的
WORKDIR
进行解释的。