当前撰写的yaml:
version: '3.7'
networks:
app-tier:
driver: bridge
services:
php:
container_name: docker_php
build: .docker/php73
volumes:
- .:/srv/
networks:
- app-tier
rabbitmq:
container_name: docker_rabbitmq
image: "rabbitmq:3-management"
hostname: "rabbitmq-localhost"
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- "15672:15672"
- "5672:5672"
networks:
- app-tier
我的目标是从localhost中的docker_php到达docker_rabbitmq容器:
#bash php_container
telnet loaclhost 15672
如何配置以下网络:
容器A在本地主机上有端口映射到容器B?
答案 0 :(得分:0)
您受内部端口的限制,这意味着,如果您的两个容器在同一docker定义的网络中,则可以使用相应容器的内部打开的端口。对于要在另一个容器中定义的hostname
,可以在links
内部的服务定义中使用docker-compose.yml
属性。
考虑一个微服务,您只希望仅由该网络上的容器访问该微服务,因此公开主机上的端口没有任何意义。现在假设rabbitmq
是您要从php
服务访问的服务,则需要在rabbitmq
服务定义中定义指向php
的链接(请不要链接/主机定义不是双向的,如果您需要在php
中使用rabbitmq
,则需要在rabbitmq
中为php
)定义一个链接
version: '3.7'
networks:
app-tier:
driver: bridge
services:
php:
container_name: docker_php
build: .docker/php73
volumes:
- .:/srv/
networks:
- app-tier
links:
- rabbitmq
rabbitmq:
container_name: docker_rabbitmq
image: "rabbitmq:3-management"
hostname: "rabbitmq-localhost"
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
networks:
- app-tier
现在您可以从rabbitmq
访问php
的内部端口,但是请注意,外部端口不可访问,这些端口用于主机。
# inside your `php` container `bash`
telnet rabbitmq <internal_port>
我不是通过删除来摆脱rabbitmq
中的端口
现在主机上无法访问rabbitmq
的这些端口。
如果要访问端口,以便在rabbitmq
中打开的端口可以在本地主机上的php
中访问。最简单的方法是将rabbitmq
配置为在php
的网络上以容器网络模式运行以执行此简单添加操作
network_mode:“容器:[容器名称/ ID]”
rabbitmq:
container_name: docker_rabbitmq
image: "rabbitmq:3-management"
hostname: "rabbitmq-localhost"
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
network_mode: "container:php"
ports:
- "15672:15672"
- "5672:5672"