Docker组成端口映射

我有一个docker-compose yml文件,如下所示

version: '2' services: nodejs: build: context: . dockerfile: DockerFile ports: - "4000:4000" links: - redis expose: - "6379" redis: build: context: . dockerfile: Dockerfile-redis 

我的目标是转发nodejs-127.0.0.1端口6379到redis主机。 我已经可以从nodejs机器上ping redis了,但是这些端口没有映射。 试图公开选项,但没有机会。

如果要绑定到来自nodejs容器的redis端口,则必须在redis容器中公开该端口:

 version: '2' services: nodejs: build: context: . dockerfile: DockerFile ports: - "4000:4000" links: - redis redis: build: context: . dockerfile: Dockerfile-redis expose: - "6379" 

这个expose标签可以让你公开端口,而不会将它们发布到主机上,但是它们会暴露在容器networking中。

https://docs.docker.com/compose/compose-file/#expose

ports标记将映射主机端口与容器端口HOST:CONTAINER

https://docs.docker.com/compose/compose-file/#ports

需要指出的是,所有上述解决scheme都将端口映射到您计算机上的每个接口。 如果您拥有公共IP地址,或者您的机器在大型networking上拥有IP,则这并不理想。 您的应用程序可能会暴露给比您希望的更广泛的受众。

 redis: build: context: dockerfile: Dockerfile-redis ports: - "127.0.0.1:3901:3901" 

127.0.0.1是映射到本机上的主机名localhost的IP地址。 所以现在你的应用程序只能通过这个接口暴露出来,因为127.0.0.1只能通过你的机器访问,所以你并没有把你的容器暴露给整个世界。

文档解释了这一点,可以在这里find: https : //docs.docker.com/compose/compose-file/#ports

如果要从主机(127.0.0.1)访问redis ,则必须使用ports命令。

 redis: build: context: . dockerfile: Dockerfile-redis ports: - "6379:6379"