gpt4 book ai didi

javascript - 不能 Dockerize Elm

转载 作者:行者123 更新时间:2023-12-02 18:15:07 28 4
gpt4 key购买 nike

我一直在对 Elm 应用程序进行 docker 化时遇到问题。据我所知,我已经创建了一个完整且有效的 Docker 文件……但它不起作用。

我会解释的。

所以我的脚本在 3 个文件中运行。

首先是启动脚本dockerBuild.sh

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)

docker build -t elmapp .
docker run -p 8000:8000 elmapp

这只是杀死所有以前的 docker 镜像并构建和运行 elmapp

接下来我有正在调用的 Dockerfile:

FROM node:latest

RUN npm install -g yarn
RUN yarn global add elm

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . /usr/src/app
RUN chmod 777 runElm.sh

EXPOSE 8000
CMD sh runElm.sh

这会产生所需的输出并运行 runElm.sh

我有两种替代方法来设置 runElm 文件 - 它们都产生相同的结果。

  • 备选方案 1

    elm-reactor --address=0.0.0.0 --port=8000

这只是在以下 html 文件上调用 elm-reactor:

<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="/_compile/src/Main.elm"></script>
<style>
body, html{
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<script>
var app = Elm.Main.fullscreen()
</script>
</body>
</html>
  • 备选方案 2

另一种编译 Elm 应用程序的可能方法是将代码转换为 javascript 并在 html 文档中运行 javascript。这里的 runElm 文件应该是这样的:

elm-make ./src/Main.elm --output=main.js
python -m SimpleHTTPServer 8000

html 看起来像这样:

<!DOCTYPE HTML>
<html>

<head>
<meta charset="UTF-8">
<title>Elm • Play</title>
<link rel="stylesheet" href="style.css">
<style>
body, html{
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
</style>
</head>

<body>
<div id="main"></div>
</body>

<script type="text/javascript" src="./src/main.js"></script>
<script>
var node = document.getElementById('main');
var app = Elm.Main.embed(node);
</script>

</html>

问题:

这里的问题是,当我在构建队列完成后导航到 localhost:8000 时,我得到 404。但是,如果我在 Dockerfile 中运行上述两个替代方案中的任何一个 not 我得到我的程序编译就好了。通常问题是端口没有正确公开,但在这里我在我的 dockerfile 中公开了端口 8000,在我的 docker run 中,它与我的 SimpleHTTPServer 上运行的端口相同榆树 react 器 服务器。我已经研究了各种其他方法来让 Docker 与 Elm 一起玩得很好,但我遇到了困难。

有人有什么建议吗?

编辑:

已关闭 - 不确定我做了什么,但在检查并确保所有内容的格式正确后,它现在可以正常工作了。一定是刚写原始代码的时候累了。谢谢大家!

最佳答案

如果这是一个 httpserver 我猜它应该在端口 80 上运行,当你指定端口 8000 时意味着你公开容器端口而不是主机端口,你可以通过任何一种方式进行端口映射

  1. 与你做的一样,容器上的端口 8000 将被映射到主机上的随机端口。
  2. 您可以通过将此添加到您用来创建container -p 8000:80 , 8000 在主机上,80 在容器上

注意

EXPOSE 指令通知 Docker 在容器启动时要暴露某个端口:

EXPOSE port1 port2 …

即使在暴露端口之后,在启动容器时,您仍然需要使用 -p 标志向“docker run”cmd 提供端口映射。当您想将容器暴露的端口映射到自定义主机端口时,此指令很有用

端口命令查找绑定(bind)到一个暴露的面向公众的端口容器中的端口:

$ docker port CONTAINER PRIVATE_PORT

如果您想知道哪个绑定(bind)到容器端口,请运行以下命令

docker port CONTAINER

关于javascript - 不能 Dockerize Elm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961285/

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