如何使用Docker在本地部署Tableau Dashboard Extensions(Web App)

问题描述 投票:2回答:1

Tableau仪表板扩展名(https://www.tableau.com/developer/extensions)本质上是用于Tableau的html / css / js Web应用程序。我已经创建了一个,现在要求我在本地对应用程序进行“ dockerize”,以便可以在AWS EC2实例或GCP服务器上运行它。我了解Docker的好处,因此我需要为此创建一个Dockerfile,但是我正在为此而努力。我已经在计算机上安装了Docker。这是我的终端(在Mac上)的一些输出:

> docker --version
Docker version 19.03.5, build 633a0ea
> npm --version
6.13.4
> node --version
v12.15.0

我有一个Tableau扩展目录,其中包含以下文件:

  • my_web_app.html(主要JS作为脚本包含在html文件中)
  • d3.v5.min.js(带有d3库的JS,已加载到html文件中)
  • package.json
  • package-lock.json
  • my_web_app.trex(.trex文件是Tableau应用程序的入口点(我相信))
  • tableau.extensions.1.latest.js(带有tableau扩展API的JS,已加载到html文件中]

没有此应用程序的后端,并且为了在本地运行我的Web应用程序,我目前仅在此目录中的命令行中运行npm start

我的问题是,我如何“泊坞窗”此网络应用程序,以便可以在终端中使用docker run ...在本地运行该应用程序?特别是,我应该在网上搜索如何使用docker部署Node.js应用程序(示例很多)或使用docker部署npm应用程序等。我根本不需要运行node index.js来使用此应用程序,因此尽管我不确定是否需要此文件,但我认为我不需要node.js dockerfile。

任何帮助/说明/参考等,将不胜感激,谢谢!

Edit1:由于我的应用程序没有后端,因此我(至少,我认为)在目录中没有index.jsserver.js文件,我认为这导致了某些问题我对如何执行此操作感到困惑。

Edit2:请让我知道是否可以发送任何其他信息。我正在积极研究此问题,如果可以解决,将更新问题/发布答案。

Edit3:顺便说一下,这是我目前的努力。我有以下名为Dockerfile的文件,看起来像:

FROM node:12
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD npm start
EXPOSE 8081

我运行了docker build(我已经使用该应用程序进入目录了,并收到以下输出:

> docker build . -t shot_charts_docker_container
Sending build context to Docker daemon  119.2MB
Step 1/7 : FROM node:12
12: Pulling from library/node
c0c53f743a40: Pull complete 
66997431d390: Pull complete 
0ea865e2909f: Pull complete 
584bf23912b7: Pull complete 
3c4c73959f29: Pull complete 
63e05266fc4b: Pull complete 
b00869e1130e: Pull complete 
45b49819ba5a: Pull complete 
87465fce1a7f: Pull complete 
Digest: sha256:facc1cbde6e5aa3255092b1a1417451953c80bd31ab5a4403f8bcd90b90a8407
Status: Downloaded newer image for node:12
 ---> d834cbcf2402
Step 2/7 : WORKDIR /app
 ---> Running in a30398234870
Removing intermediate container a30398234870
 ---> da3b6160bd05
Step 3/7 : COPY package.json /app
 ---> 7459e2d070b9
Step 4/7 : RUN npm install
 ---> Running in 0f7eeae1dfde
npm WARN deprecated [email protected]: CircularJSON is in maintenance only, flatted is its successor.

> [email protected] postinstall /app/node_modules/ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

added 698 packages from 479 contributors and audited 7147 packages in 19.527s

15 packages are looking for funding
  run `npm fund` for details

found 1 high severity vulnerability
  run `npm audit fix` to fix them, or `npm audit` for details
Removing intermediate container 0f7eeae1dfde
 ---> 8a2667e42b0a
Step 5/7 : COPY . /app
 ---> debe78f1501a
Step 6/7 : CMD npm start
 ---> Running in 58b466b8dde8
Removing intermediate container 58b466b8dde8
 ---> 7b26023a3b1b
Step 7/7 : EXPOSE 8081
 ---> Running in 6c5d2c9d8012
Removing intermediate container 6c5d2c9d8012
 ---> fd2ef4b32da5
Successfully built fd2ef4b32da5
Successfully tagged shot_charts_docker_container:latest

我从上面的输出中删除了一些警告,以缩短本文的时间,因为我认为警告与我们无关。似乎我走了正确的路,但我不是100%确定...

Edit4:然后我运行docker run -p 8080:8080 shot_charts_docker_container并收到以下输出:

> [email protected] start /app
> node node_modules/http-server/bin/http-server -p 8765

Starting up http-server, serving ./
Available on:
  http://127.0.0.1:8765
  http://172.17.0.2:8765
Hit CTRL-C to stop the server

但是,当我去访问这些URL时,似乎没有一个起作用。

Edit5:如果有帮助,这是我从运行docker image ls时收到的内容:

> docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
shot_charts_docker_container   latest              fd2ef4b32da5        7 minutes ago       1.17GB
node                           12                  d834cbcf2402        8 days ago          916MB
hello-world                    latest              fce289e99eb9        14 months ago       1.84kB

并且来自docker container ls

> docker container ls
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                              NAMES
8d71818baf51        shot_charts_docker_container   "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->8080/tcp, 8081/tcp   stupefied_kalam

Edit6:不知道我还有什么可以分享的内容,也许是package.json中的信息?

javascript node.js docker tableau
1个回答
2
投票

[服务器(Docker容器内部的端口)正在侦听的端口与Docker试图向外界公开的端口之间不匹配。

Starting up http-server, serving ./
Available on:
  http://127.0.0.1:8765
  http://172.17.0.2:8765
Hit CTRL-C to stop the server

此输出显示服务器正在侦听端口8765,但是您的docker ls命令显示了0.0.0.0:8080->8080/tcp,因此映射了错误的端口!

解决方案

Dockerfile中,EXPOSE服务器正在监听的端口。

EXPOSE 8765

运行图像时,map这些端口到您选择的任何端口

docker run -p 8765:8765 shot_charts_docker_container

8765:8765告诉docker将HOST的端口8765(第一个数字)映射到CONTAINER的8765(第二个数字,即我们EXPOSE的端口)。

在大多数设置下,服务器应该在http://localhost:8765可用。

© www.soinside.com 2019 - 2024. All rights reserved.