首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能把榆树关起来

不能把榆树关起来
EN

Stack Overflow用户
提问于 2018-04-22 00:05:59
回答 2查看 697关注 0票数 3

我在处理榆树申请时遇到了麻烦。据我所知,我已经创建了一个完整和工作的码头文件.但不起作用。

我来解释。

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

首先是开始脚本dockerBuild.sh

代码语言:javascript
复制
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

这只会杀死所有以前的停靠映像,并构建并运行elmapp

接下来,我的Dockerfile正在被调用:

代码语言:javascript
复制
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

代码语言:javascript
复制
<!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文件将如下所示:

代码语言:javascript
复制
elm-make ./src/Main.elm --output=main.js
python -m SimpleHTTPServer 8000

html应该是这样的:

代码语言:javascript
复制
<!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时:在构建队列完成后,我得到404。但是,如果我在Dockerfile中运行上述两种备选方案中的任何一种,那么我的程序就可以编译得很好。通常的问题是端口没有正确地公开,但是这里我已经在我的dockerfile中公开了端口8000,在我的码头运行中,它和在我的SimpleHTTPServerelm-reactor服务器上运行的端口是相同的。我已经考虑过各种其他的方法让道克尔和埃尔姆打得很好,我也遇到了困难。

有人有什么建议吗?

编辑:

关闭--不确定我做了什么,但是在通过并确保所有的格式都正确之后,它现在工作了。我写原始代码的时候一定是累了。谢谢大家!

EN

回答 2

Stack Overflow用户

发布于 2018-04-22 00:36:15

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

  1. 与您所做的一样,容器上的端口8000将映射到主机上的随机端口。
  2. 您可以通过添加以下cmd来指定这一点:在主机上创建容器-p 8000:80,在容器上创建80。

注意事项

公开指令通知Docker,当容器启动时,某个端口将被公开:

公开port1 port2…

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

端口命令查找绑定到容器中公开端口的面向公共端口:

$码头集装箱PRIVATE_PORT

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

码头集装箱

票数 1
EN

Stack Overflow用户

发布于 2018-04-22 15:38:10

如果您得到404,这意味着web服务器正在运行,但它找不到您所请求的文件。因此,确保您的路径正确,并检查您的web服务器(docker logs YOURCONTAINERNAME)的输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49961285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档