Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';杜克泽榆树_Javascript_Html_Docker_Functional Programming_Elm - Fatal编程技术网

Javascript Can';杜克泽榆树

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 这将删除所有以前

我在处理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
这将删除所有以前的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

这只需对以下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>
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时,这意味着您要公开的是容器端口而不是主机端口,您可以通过任何一种方式进行端口映射

  • 正如您所做的那样,容器上的端口8000将被映射 到主机上的随机端口
  • 可以通过将此命令添加到用于创建 容器-p 8000:80,主机上8000,容器上80
  • 注意

    EXPOSE指令通知Docker某个端口将在容器启动时公开:

    公开端口1端口2…

    即使在公开端口之后,在启动容器时,仍然需要使用-p标志提供端口映射到“docker run”cmd。当您希望将容器公开端口映射到自定义主机端口时,此指令非常有用

    port命令查找绑定到公开端口的面向公共的端口 集装箱中的港口:

    $docker port集装箱专用港口

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

    码头码头码头集装箱


    默认情况下,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>