Docker端口未映射

时间:2019-11-03 19:45:45

标签: docker aurelia

很抱歉,事实证明这很明显,但是我很难从主机上的容器外部访问dockerized服务器。这是我在做什么:

我正在使用以下命令运行容器:

docker run -it --rm --name aurelia_dev -p 8888:8080 -v /Users/terskine/git/marvel/legendary:/app aurelia /bin/bash

我正在容器中运行应用程序:

cd app/
au run

在另一个终端中,我可以看到容器正在运行:

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
4b0a14bc6e88        aurelia             "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:8888->8080/tcp   aurelia_dev

但是,我无法到达服务器:

$ curl http://localhost:8888
curl: (52) Empty reply from server

但是在容器中,我可以到达服务器:

$ docker exec -it aurelia_dev /bin/bash
root@4b0a14bc6e88:/# curl http://localhost:8080
<!DOCTYPE html> ...
<html>
... [A whole bunch of HTML] ...
</html>
root@4b0a14bc6e88:/# 

为什么不能从主机端口8888的容器外部访问服务器?

我确定我缺少明显的步骤。请帮帮我。

谢谢!


编辑1: 我认为以下内容不是必需的,但如果有帮助,我将运行一个简单的aurelia容器,该容器是使用以下Dockerfile创建的:

FROM node

RUN npm install -g aurelia-cli

CMD /bin/bash

我正在运行的aurelia项目是官方教程项目,可以在这里找到:https://aurelia.io/docs/tutorials/creating-a-contact-manager


编辑2:

这是我的主机文件的内容。

root@d7d1cc03a5c0:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      d7d1cc03a5c0

似乎我没有在听172.17.0.2:8080

root@d7d1cc03a5c0:/# curl 172.17.0.2:8080
curl: (7) Failed to connect to 172.17.0.2 port 8080: Connection refused

2 个答案:

答案 0 :(得分:0)

事实证明,这与我的Docker配置无关。相反,这是Aurelia使用的webpack的问题。 Webpack无法在docker容器中与localhost一起使用,请检出here

要解决此问题,必须将0.0.0.0指定为主机,而不要使用默认值localhost

au run --host 0.0.0.0

注意:我问了一个关于实际问题here的问题,并回答了这个问题,因此以后寻找具有相同问题的其他人会更容易,但是我离开了这个问题,因为像我这样的人认为这是docker配置问题。

答案 1 :(得分:0)

我已经在另一个线程上回答了这个问题,但是对于其他人来说,在这里寻找答案是:

您几乎可以在所有aurelia命令中覆盖public static async IAsyncEnumerable<T> ToAsyncEnumerable<T>( this IReceivableSourceBlock<T> source, [EnumeratorCancellation]CancellationToken cancellationToken = default) { while (await source.OutputAvailableAsync(cancellationToken).ConfigureAwait(false)) { while (source.TryReceive(out T item)) { yield return item; } } } hostport是其中之一,

示例:

au run

au run --host 0.0.0.0 --port 7070

au run --watch --host 127.0.0.1 --port 7080au cypress也存在相同的标志集,此外,您还可以告诉au protractor在运行测试之前和之后启动和关闭应用程序,再次如果需要,可以使用其他端口和IP地址。

示例:

au

au cypress --run --start --port 7070 --host 127.0.0.1

结帐herehere

此外,您可以查看Aurelia Build Systems上的文档以及Medium上我的博客文章