C# 将docker容器端口暴露给其他计算机
我已经使用下面的命令在Docker中安装了RedisC# 将docker容器端口暴露给其他计算机,c#,docker,redis,C#,Docker,Redis,我已经使用下面的命令在Docker中安装了Redis docker run -d -p 6379:6379 redis:3.0.1 docker run -d -p 6380:6379 redis:2.8.20 现在我需要从另一台机器访问这个redis实例 public static ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(IPOFDOCKERINSTALLEDMACHINE:6379); 我的应用程序托管在不同
docker run -d -p 6379:6379 redis:3.0.1
docker run -d -p 6380:6379 redis:2.8.20
现在我需要从另一台机器访问这个redis实例
public static ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(IPOFDOCKERINSTALLEDMACHINE:6379);
我的应用程序托管在不同服务器的另一台计算机上
Wnen我正在运行应用程序,以下是例外情况
无法连接到redis服务器;创建
断开多路复用器,禁用中止连接失败。插座故障
平
docker或oracle虚拟机中是否需要更改任何内容?docker正在将您的公开端口绑定到本地主机。这就是你发现问题的原因。为了使Docker将这些公开的端口解除绑定到localhost,必须通过更改用于启动容器的命令来运行容器:
docker run-d-p 0.0.0:6380:6379 redis:2.8.20
docker run-d-p 0.0.0:6379:6379 redis:3.0.1
改变的部分是,现在您正在为本地部分指定主机和端口(并保持容器部分的原样;单个端口)
我希望这能帮助你,伙计!请小心点。这不像你通常想要达到的目标。如果您正在使用redis服务进行生产,请确保您的redis服务未经身份验证。如果您的run命令没有任何ip限制,则:
$ docker run -d -p 6379:6379 redis:3.0.1
$ docker run -d -p 6380:6379 redis:2.8.20
以及在注释中显示绑定到localhost的netstat输出:
$ netstat -na | grep 6379 && netstat -na | grep 6380
TCP 127.0.0.1:6379 0.0.0.0:0 LISTENING
发布到所有接口的端口与正在本地主机上侦听的端口不匹配。有几种可能性:
sudonetstat-lntp | grep6379
查找使用该端口的进程docker ps-a
运行。如果容器正在运行,ps输出将包括任何端口绑定。如果容器存在,即使已退出,也可以使用docker logs container\u id
检查其日志,以查看是否存在任何错误--ip
标志将dockerd上的默认ip更改为127.0.0.1。默认情况下,已发布端口侦听所有接口(0.0.0.0)docker run-d-p 127.0.0.1:6379:6379 redis:3.0.1发布端口,则可以解释与127.0.0.1的绑定。从命令中删除127.0.0.1:
将默认绑定到所有接口
telnet IPOFDOCKERMACHINE 6380
telnet IPOFDOCKERMACHINE 6379
在不同的服务器上通过网络连接多个容器是一个完美的应用案例。您应该尝试创建一个覆盖网络,并将正在运行的容器连接到swarm和该网络,如前所述。 根据您对swarm生态系统的了解,您可以尝试不同的解决方案 从docker 1.12开始,如果您想手动管理容器,可以运行
# retrieve the last swarm version
$ docker pull swarm
# running your swarm manager on your server
$ docker swarm init --advertise-addr $(hostname -I | awk '{print $1}')
# creating a cross server container network
$ docker network create --driver overlay redisnet
此命令将输出要在节点上使用的从属命令。此命令将允许您作为“从属”服务器加入swarm。如果要从该服务器启动服务,则应输出以下命令,该命令将为您提供manager令牌
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1ewyz5urm5ofu78vddmrixfaye5mx0cnuj0hwxdt7baywmppav-0p5n6b7hz170gb79uuvd2ipoy \
<IP_ADDRESS>:2377
$docker swarm加入令牌管理器
要将管理器添加到此群,请运行以下命令:
docker群集加入\
--令牌SWMTKN-1-1EWYZ5URM5Of78VDDMRIXFaye5Mx0CNUJ0HWXDT7BAYWMPPAV-0p5n6b7hz170gb79uuvd2ipoy\
:2377
当您的节点位于swarm上时,您可以启动带有副本的redis服务
$ docker service create --network redisnet \
--name redis --replicas 1 redis:3.0.1
$ docker service create --network redisnet \
--name old_redis --replicas 1 redis:2.8.20
$ docker service create --network redisnet --name app <APP_IMAGE>
$docker服务创建--网络redisnet\
--名称redis--副本1 redis:3.0.1
$docker服务创建--网络redisnet\
--名称old_redis--副本1 redis:2.8.20
$docker service create--network redisnet--name app or,但swarm是正式的选择。@Prithvi:看起来您无法从本地计算机访问redis。。您是否尝试在oracle虚拟机设置中进行端口转发
通过这种方式,您可以从本地计算机访问在Oracle中运行的应用程序到要访问的VM 公开容器对于主机识别在哪个端口容器中运行非常重要。
-用于公开端口的docker run命令中的p。
语法:docker run-p host\u ip:host\u port:container\u port image\u name(将host\u ip添加到您的跑步中)
docker run-d-p主机ip:6379:6379 redis:3.0.1
这会将容器的端口6379绑定到主机的主机ip上的端口6379。
使用iptables实现清晰:iptables-L-n-tnat
假设容器ip be:172.17.0.2
现在请求发送给何