Javascript Can';杜克泽榆树
我在处理Elm应用程序时遇到了麻烦。据我所知,我已经创建了一个完整的工作Docker文件。。。但它不起作用 我会解释的 所以我的脚本在3个文件中运行 首先是开始脚本Javascript Can';杜克泽榆树,javascript,html,docker,functional-programming,elm,Javascript,Html,Docker,Functional Programming,Elm,我在处理Elm应用程序时遇到了麻烦。据我所知,我已经创建了一个完整的工作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 这将删除所有以前
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反应堆——地址=0.0.0.0——端口=8000
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>
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>
榆树•玩耍
正文,html{
身高:100%;
宽度:100%;
保证金:0;
填充:0;
}
var节点=document.getElementById('main');
var app=Elm.Main.embed(节点);
问题是:
这里的问题是,当我在构建队列完成后导航到localhost:8000时,我得到404。但是,如果我不在Dockerfile中运行上述两个选项中的任何一个,我的程序就可以正常编译。通常问题是端口未正确公开,但这里我在docker运行中的dockerfile中公开了端口8000,它与运行在SimpleHTTPServer
和elm reactor
服务器上的端口相同。我已经研究了其他各种方法让Docker和Elm玩得很好,但我遇到了一些困难
有人有什么建议吗
编辑:
关闭-不确定我做了什么,但经过检查并确保所有内容的格式正确后,它现在可以工作了。我写原始代码时一定很累。谢谢大家 如果这是一个httpserver,我想它应该在端口80上运行,当您指定端口8000时,这意味着您要公开的是容器端口而不是主机端口,您可以通过任何一种方式进行端口映射
默认情况下,elm reactor侦听本地主机,而不是所有接口。这可能会阻止您从容器外部访问它,请尝试:
elm reactor-a 0.0.0
如果您获得404,这意味着web服务器正在运行,但它找不到您请求的文件。因此,请确保路径正确,并检查web服务器的输出(docker logs YOURCONTAINERNAME
)为什么要这样做?elm本来就是一个前端框架;您应该编译elm,而不是在生产中的反应堆中使用它好问题!我想我可能会在生产中编译Elm,但这是一个玩具应用程序。稍后在编译版本中,我可能会遇到同样的问题,但可能值得研究一下。hmmm…我在docker中公开了端口8000,在dockerrun中映射了8000:8000,我的服务器在端口8000上运行。我想它应该可以一直使用8000端口。是吗?是的,就像你说的那样,它将在你的容器上暴露端口8000,并在你的主机上的端口8000上运行它。
<!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>