我在处理榆树申请时遇到了麻烦。据我所知,我已经创建了一个完整和工作的码头文件.但不起作用。
我来解释。
所以我的脚本运行在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这只会杀死所有以前的停靠映像,并构建并运行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文件--它们都产生相同的结果。
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>编译Elm应用程序的另一种可能方法是将代码转到javascript,并在html文档中运行javascript。在这里,runElm文件将如下所示:
elm-make ./src/Main.elm --output=main.js
python -m SimpleHTTPServer 8000html应该是这样的:
<!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,在我的码头运行中,它和在我的SimpleHTTPServer和elm-reactor服务器上运行的端口是相同的。我已经考虑过各种其他的方法让道克尔和埃尔姆打得很好,我也遇到了困难。
有人有什么建议吗?
编辑:
关闭--不确定我做了什么,但是在通过并确保所有的格式都正确之后,它现在工作了。我写原始代码的时候一定是累了。谢谢大家!
发布于 2018-04-22 00:36:15
如果这是一个httpserver (我猜它应该在端口80上运行),当您指定端口8000 (这意味着您公开的是容器端口而不是主机端口)时,您可以通过两种方式进行端口映射。
注意事项
公开指令通知Docker,当容器启动时,某个端口将被公开:
公开port1 port2…
即使在公开端口之后,在启动容器时,仍然需要使用-p标志将端口映射到"docker“cmd。当您要将容器公开端口映射到自定义主机端口时,此指令非常有用。
端口命令查找绑定到容器中公开端口的面向公共端口:
$码头集装箱PRIVATE_PORT
如果您想知道哪个绑定到容器端口,请运行以下命令
码头集装箱
发布于 2018-04-22 15:38:10
如果您得到404,这意味着web服务器正在运行,但它找不到您所请求的文件。因此,确保您的路径正确,并检查您的web服务器(docker logs YOURCONTAINERNAME)的输出。
https://stackoverflow.com/questions/49961285
复制相似问题