gpt4 book ai didi

javascript - 如何使用 Docker 在本地部署 Tableau 仪表板扩展(Web 应用程序)

转载 作者:行者123 更新时间:2023-12-02 18:10:14 25 4
gpt4 key购买 nike

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

我的问题是,如何“dockerize”这个网络应用程序,以便我可以在终端中使用 docker run ... 在本地运行该应用程序?特别是,我应该在线搜索如何使用 docker 部署 Node.js 应用程序(有很多示例),还是使用 Docker 部署 npm 应用程序等?我根本不运行 node index.js 来使用这个应用程序,所以我认为我不需要 node.js Dockerfile,尽管我不确定这需要什么.

编辑1

因为我的应用程序没有后端,我没有(至少,我不认为)有 index.jsserver.js 文件我的目录,我认为这让我对如何执行此操作感到困惑。

编辑2

这是我目前的努力。我有以下名为 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 circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.

> ejs@2.7.4 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% 确定......

编辑3

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

> extensions-api-sdk@0.1.0 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 时,似乎都不起作用。

编辑4

这是我通过运行 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

最佳答案

服务器(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

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

docker run -p 8765:8765 shot_charts_docker_container

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

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

关于javascript - 如何使用 Docker 在本地部署 Tableau 仪表板扩展(Web 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60554440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com