代码之家  ›  专栏  ›  技术社区  ›  James T.

docker容器的Web应用程序已启动,但也已超时

  •  1
  • James T.  · 技术社区  · 8 年前

    我有一个节点应用程序正在运行localhost:3000 and 希望公开部署它。通过在VM内部运行并使用端口转发来实现这一点很容易,但我正在为docker和容器的部署而努力。

    我刚刚推了一个新的集装箱形象,我的私人码头回购与 docker-compose push 并在我的Azure web应用中启用了连续部署。日志显示它在运行图像时 docker run web应用程序中的子命令。

    我的应用程序在容器中运行需要很长时间,当它运行时,它超时了,Azure似乎终止了它。

    应用程序运行所需的我的环境变量是在web应用程序的Azure门户内的应用程序设置中手动输入的。

    2018_09_18_RD00155D258812_default_docker.log:
    2018-09-18T00:14:27.228360304Z   level: 'info',
    2018-09-18T00:14:27.228366005Z   label: 'app/server.js',
    2018-09-18T00:14:27.228370005Z   timestamp: '2018-09-18T00:14:27.226Z',
    2018-09-18T00:14:27.228374605Z   [Symbol(level)]: 'info' }
    2018-09-18T00:14:27.844023142Z { message: 'createdQueue; results = {"name":"webhook-queue-dev","approximateMessageCount":1,"created":false}',
    2018-09-18T00:14:27.844050643Z   level: 'debug',
    2018-09-18T00:14:27.844055943Z   label: 'data-controllers/azure-queue.js',
    2018-09-18T00:14:27.844060543Z   timestamp: '2018-09-18T00:14:27.843Z',
    2018-09-18T00:14:27.844065044Z   [Symbol(level)]: 'debug' }
    
    2018_09_18_RD00155D258812_docker.log:
    2018-09-18 00:14:10.809 INFO  - Starting container for site
    2018-09-18 00:14:10.809 INFO  - docker run -d -p 18365:80 --name webhook-web-app_0 -e WEBSITE_SITE_NAME=webhook-web-app -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=123 -e HTTP_LOGGING_ENABLED=1 jtara1/webhook  
    
    2018-09-18 00:18:04.705 ERROR - Container webhook-web-app_0 for site webhook-web-app did not start within expected time limit. Elapsed time = 230.8677441 sec
    

    version: '3'
    
    services:
      webhook:
        image: jtara1/webhook
        build:
          context: .
          dockerfile: Dockerfile
        command: node server.js
        volumes:
          - .:/app
          - /app/node_modules/
        expose:
          - "3000"
          - "80"
        ports:
          - "3000:80"
    

    Dockerfile文件

    FROM node:8-alpine
    
    WORKDIR /app
    
    COPY package.json .
    
    RUN npm install
    
    COPY . .
    
    # Expose our server port.
    EXPOSE 3000 80
    
    # Run our app.
    CMD ["node", "server.js"]
    

    我在localhost上用

       $ docker-compose up -d
       $ docker-compose exec webhook sh
       > wget localhost:3000
       $ docker-compose logs
       $ docker-compose down
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   James T.    8 年前

    最后,我发现了在节点应用程序、docker容器和azure web应用程序配置之间配置端口、端口转发、主机名和环境变量的问题和错误。

    我没有意识到每个docker构建的标记需要与远程docker存储库同名。

    docker build -t jtara1/wh . id=$(docker run -p 80:3000 jtara1/wh) curl localhost 应该输出“Hello World”之类的内容,或者从根索引中从应用程序的响应中返回的任何内容,以便进行测试。以前,我是 docker exec -it $id sh (有效地远程访问我的本地容器)然后从里面的应用程序得到一个响应,这给我以后造成了混乱。最后, docker push jtara1/wh

    docker run -p 53600:80 jtara1/wh 这表示docker容器可以在端口53600上访问,并将该流量转发到端口80(可能是我的节点应用程序)。但是,我需要将env var PORT定义为节点应用程序使用的端口,默认为PORT=80(在上面链接的文章中,它建议网站(端口是azureweb应用程序用来确定我的应用程序所在的端口的env var)。

    传统上,在linux虚拟机上,我在 $ hostname -I 并在虚拟机的公共ip上公开访问它。在我的应用程序中,我的主机是0.0.0.0,而不是通常的localhost,所以docker可以访问它

    我努力有效地管理我的敏感环境变量(前一段时间,本期没有),而应用程序需要,同时仍然试图避免管理,重构,或更新他们在多个地方。最后我只是在web应用程序的应用程序设置中手动输入它们,因为现在只有不到18个。

    FROM node:8-alpine
    
    RUN mkdir /app
    WORKDIR /app
    
    ADD package.json /app/
    
    RUN npm install
    
    ADD . /app/
    
    EXPOSE 80
    
    CMD ["node", "server.js", "--host", "0.0.0.0"]
    
        2
  •  1
  •   philippn    7 年前

    结果发现,在Azure上,默认情况下部署Docker容器的超时时间为230秒,但是可以在应用程序设置中使用键轻松地覆盖此超时 WEBSITES_CONTAINER_START_TIME_LIMIT . 只需将其设置为更高的值,即。 600 (=10分钟)。请注意,最大值为1800秒。

    https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-faq