Docker端口未映射

Docker端口未映射,docker,aurelia,Docker,Aurelia,如果这是显而易见的,我很抱歉,但是我很难从主机上的容器外部访问停靠的服务器。以下是我正在做的: 我正在使用以下命令运行容器: 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 contain

如果这是显而易见的,我很抱歉,但是我很难从主机上的容器外部访问停靠的服务器。以下是我正在做的:

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

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:/# 
但在容器中,我可以到达服务器:

$ 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:/# 
我正在运行的aurelia项目是官方教程项目,可在此处找到:


编辑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

这原来不是我的Docker配置的问题。相反,这是Aurelia使用的webpack的一个问题。Webpack无法与docker容器中的
localhost
一起使用,请签出

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

au run --host 0.0.0.0

注意:我问了一个关于实际问题的问题并回答了它,这样以后就更容易找到其他有相同问题的人,但我留下这个问题是因为可能有像我这样的人认为这是docker配置问题。

我在另一个线程中回答了这个问题,但对于其他正在寻找答案的人来说,答案是:

您可以覆盖几乎所有aurelia命令中的主机和端口,
au run
就是其中之一

示例:

au运行--主机0.0.0.0--端口7070

au运行--监视--主机127.0.0.1--端口7080

root@d7d1cc03a5c0:/# curl 172.17.0.2:8080
curl: (7) Failed to connect to 172.17.0.2 port 8080: Connection refused
对于
au-cypress
au-gradurator
也存在相同的标志集,此外,您还可以告诉
au
在运行测试之前和之后打开并关闭应用程序,如果需要,也可以在不同的端口和IP地址上打开和关闭应用程序

例如:

au-cypress——运行——启动——端口7070——主机127.0.0.1

au量角器--无头--启动--端口7070--主机127.0.0.1

结帐和


另外,您可以查看上的文档和我在上的博客文章

您确定您的应用程序正在侦听
0.0.0
,而不仅仅是
localhost
?端口映射需要但不影响应用程序是否正在侦听,特别是(在您的情况下)默认docker网络上的ip。@DanielFarrell我没有意识到这一点,但我只是运行了
root@4b0a14bc6e88:/#卷曲http://0.0.0.0:8080
并收到相同的HTML响应,因此,它似乎正在收听
0.0.0.0
。谢谢你的主意。还有其他的吗?“实际上,连接到0.0.0.0相当于连接到本地主机”。您的测试尚未验证您不仅在本地主机上侦听。这应该在你的代码中很明显,或者你可以检查
netstat-l
,或者在docker的私有IP上尝试你的
curl
测试。@DanielFarrell将看到上面的
Edit 2
。这是否意味着我没有收听
0.0.0.0
?是的,我该如何修复它?是的,你提供了证据表明你的地址在容器(/etc/hosts)中,并且表明你无法连接到它,所以这可能就是网络映射不起作用的原因。从您的
Dockerfile
中,您在创建docker容器后键入的内容似乎启动了一个正在8080上侦听的程序。看起来是奥雷莉亚的事?查看其配置文档,了解如何侦听所有地址。