很抱歉,事实证明这很明显,但是我很难从主机上的容器外部访问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
我已经在另一个线程上回答了,但是对于其他人来说,在这里寻找答案是:
您几乎可以在所有aurelia命令中覆盖host
和port
,au run
是其中之一,
示例:
au run --host 0.0.0.0 --port 7070
au run --watch --host 127.0.0.1 --port 7080
au cypress
和au protractor
也存在相同的标志集,此外,您还可以告诉au
在运行测试之前和之后启动和关闭应用程序,并在不同的端口和IP地址上再次运行您希望如此。
示例:
au cypress --run --start --port 7070 --host 127.0.0.1
au protractor --headless --start --port 7070 --host 127.0.0.1
此外,您也可以查看Aurelia Build Systems上的文档和我的博客文章Medium上的>
事实证明这与我的Docker配置无关。相反,这是Aurelia使用的webpack的问题。 Webpack无法在Docker容器中与localhost
一起使用,请签出here。