我有一个像这样的码头工人:
version: '3.5'
services:
RedisServerA:
container_name: RedisServerA
image: redis:3.2.11
command: "redis-server --port 26379"
volumes:
- ../docker/redis/RedisServerA:/data
ports:
- 26379:26379
expose:
- 26379
RedisServerB:
container_name: RedisServerB
image: redis:3.2.11
command: "redis-server --port 6379"
volumes:
- ../docker/redis/RedisServerB:/data
ports:
- 6379:6379
expose:
- 6379
现在我做一个vagrant ssh
并且做
ping RedisServerA
ping RedisServerB
它们都起作用。
现在,我尝试连接到Redis服务器:
redis-cli -h RedisServerB
工作正常
然后我尝试连接到另一个
redis-cli -h RedisServerA -p 26739
它说:
Could not connect to Redis at RedisServerA:26739: Connection refused
Could not connect to Redis at RedisServerA:26739: Connection refused
两次。
我在这里想念什么?
答案 0 :(得分:4)
通常,在此设置中,您将让每个容器在其“自然”端口上运行。对于来自外部Docker的连接,您需要ports:
映射,并且可以通过主机IP地址上的已发布端口访问容器。对于Docker容器之间的连接(假设它们在同一网络上,并且如果使用裸docker run
,则手动创建该网络),则使用容器名称和容器的内部端口号。
我们可以通过删除一些不必要的行(docker-compose.yml
和container_name:
并没有实际效果)并让图像运行默认的{{1 }}设置为默认端口,并且仅使用expose:
重新映射。我们会得到:
command:
在容器之间,您将使用默认端口
ports:
在Docker外部,您将使用服务器的主机名和已发布的端口
version: '3.5'
services:
RedisServerA:
image: redis:3.2.11
volumes:
- ../docker/redis/RedisServerA:/data
ports:
- 26379:6379
RedisServerB:
image: redis:3.2.11
volumes:
- ../docker/redis/RedisServerB:/data
ports:
- 6379:6379