我有一个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了,但是端口没有映射。尝试了暴露选项,但也没有机会。
发布于 2016-02-17 03:13:47
如果你想从你的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标记允许您在不将端口发布到主机的情况下公开端口,但它们将向容器网络公开。
https://docs.docker.com/compose/compose-file/#expose
容器标记将主机端口与容器端口ports:container进行映射
发布于 2017-09-14 21:40:34
需要指出的是,上述所有解决方案都将端口映射到计算机上的每个接口。如果您有一个公共IP地址,或者您的机器在一个大型网络上有一个IP,那么这就不太可取了。您的应用程序可能会暴露给比您希望的更广泛的受众。
redis:
build:
context:
dockerfile: Dockerfile-redis
ports:
- "127.0.0.1:3901:3901"127.0.0.1是映射到计算机上的主机名localhost的ip地址。因此,现在您的应用程序仅通过该接口公开,而且由于127.0.0.1只能通过您的机器访问,因此您不会将容器公开给整个世界。
文档进一步解释了这一点,可以在以下位置找到:https://docs.docker.com/compose/compose-file/#ports
注意:如果您使用Docker for mac,这将使容器侦听Docker for Mac VM上的127.0.0.1,并且无法从本地主机访问。如果我没记错的话。
发布于 2019-06-13 03:24:00
这里的其他答案似乎都误解了你的问题。如果我理解正确的话,您希望向localhost:6379 ( redis的默认设置)发出请求,并让它们自动转发到redis容器上的相同端口。
https://unix.stackexchange.com/a/101906/38639帮助我找到了正确的答案。
首先,您需要在映像上安装nc命令。在CentOS上,这个包称为nmap-ncat,因此在下面的示例中,如果您使用不同的操作系统作为基础映像,只需将其替换为适当的包即可。
接下来,您需要告诉它在每次启动容器时运行特定的命令。您可以使用CMD来完成此操作。
# Add this to your Dockerfile
RUN yum install -y --setopt=skip_missing_names_on_install=False nmap-ncat
COPY cmd.sh /usr/local/bin/cmd.sh
RUN chmod +x /usr/local/bin/cmd.sh
CMD ["/usr/local/bin/cmd.sh"]最后,我们需要在cmd.sh中设置端口转发。我发现,即使使用-l和-k选项,nc有时也会在请求完成时终止,因此我使用while循环来确保它始终在运行。
# cmd.sh
#! /usr/bin/env bash
while nc -l -p 6379 -k -c "nc redis 6379" || true; do true; done &
tail -f /dev/null # Or any other command that never exitshttps://stackoverflow.com/questions/35429837
复制相似问题