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扩展目录,其中包含以下文件:
没有此应用程序的后端,并且为了在本地运行我的Web应用程序,我目前仅在此目录中的命令行中运行npm start
。
我的问题是,我如何“泊坞窗”此网络应用程序,以便可以在终端中使用docker run ...
在本地运行该应用程序?特别是,我应该在网上搜索如何使用docker部署Node.js应用程序(示例很多)或使用docker部署npm应用程序等。我根本不需要运行node index.js
来使用此应用程序,因此尽管我不确定是否需要此文件,但我认为我不需要node.js dockerfile。
任何帮助/说明/参考等,将不胜感激,谢谢!
Edit1:由于我的应用程序没有后端,因此我(至少,我认为)在目录中没有index.js
或server.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
中的信息?
[服务器(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可用。