是否可以通过主机而不是 IP 来卷曲外部容器?
Is it possible to curl external container by host instead of IP?
我有两个独立的 docker 堆栈。从堆栈 1,我想知道是否可以使用容器名称而不是其 IP 地址从堆栈 2 卷曲容器?
当访问 IP 地址时,我收到了 HTTP 代码 200 的响应。
当卷曲命名时,我收到 HTTP 400 Bad Request。
我尝试了几种不同的 docker-compose 配置。这是最新消息:
堆栈 A
version: '3'
services:
php:
build:
context: .
dockerfile: ./dev.dockerfile
container_name: arm_php
ports:
- "8000:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- redis:redis
external_links:
- a25_mysql_1:a25_mysql
networks:
- default
- a25dashboardad_default
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: arm_maildev
ports:
- "1025:25"
- "1080:80"
redis:
image: "redis"
container_name: arm_redis
ports:
- "6379:6379"
networks:
a25dashboardad_default:
external: true
堆栈 B
version: '3'
services:
php:
image: armcanada/php7-mssql
container_name: a25_php
ports:
- "8001:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- database:database
database:
image: mysql:5.7.18
container_name: a25_mysql
environment:
- "MYSQL_DATABASE=a25_db"
- "MYSQL_USER=user"
- "MYSQL_PASSWORD=password"
- "MYSQL_ROOT_PASSWORD=password"
ports:
- "33060:3306"
volumes:
- db:/var/lib/mysql
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: a25_maildev
ports:
- "1026:25"
- "1081:80"
volumes:
db:
networks:
default:
driver: bridge
来自arm_php:
作品:curl 172.19.0.4:8000/api/dmt
无效:curl a25_php:8000/api/dmt?key=8009829dedabad1e44263cf845484f14
我终于能够通过将用户定义的网络与别名结合使用来使其工作。详情如下:
堆栈 A
version: '3'
services:
php:
build:
context: .
dockerfile: ./dev.dockerfile
container_name: arm_php
ports:
- "8000:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- redis:redis
external_links:
- a25_mysql_1:a25_mysql
networks:
- default
- a25dashboardad_default
- a25dashboardad_armnet
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: arm_maildev
ports:
- "1025:25"
- "1080:80"
redis:
image: "redis"
container_name: arm_redis
ports:
- "6379:6379"
networks:
a25dashboardad_default:
external: true
a25dashboardad_armnet:
external: true
堆栈 B
version: '3'
services:
php:
image: armcanada/php7-mssql
container_name: a25_php
networks:
default:
aliases:
- default
armnet:
aliases:
- a25php
ports:
- "8001:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- database:database
database:
image: mysql:5.7.18
container_name: a25_mysql
ports:
- "33060:3306"
volumes:
- db:/var/lib/mysql
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: a25_maildev
ports:
- "1026:25"
- "1081:80"
volumes:
db:
networks:
armnet:
driver: bridge
然后我可以使用 curl a25php:8000
.
卷曲形式 arm_php
原因如文档所说:
Docker 不支持默认桥接网络上的自动服务发现。如果您希望容器能够通过容器名称解析 IP 地址,您应该改用用户定义的网络。
https://docs.docker.com/v17.09/engine/userguide/networking/#user-defined-networks
我有两个独立的 docker 堆栈。从堆栈 1,我想知道是否可以使用容器名称而不是其 IP 地址从堆栈 2 卷曲容器?
当访问 IP 地址时,我收到了 HTTP 代码 200 的响应。 当卷曲命名时,我收到 HTTP 400 Bad Request。
我尝试了几种不同的 docker-compose 配置。这是最新消息:
堆栈 A
version: '3'
services:
php:
build:
context: .
dockerfile: ./dev.dockerfile
container_name: arm_php
ports:
- "8000:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- redis:redis
external_links:
- a25_mysql_1:a25_mysql
networks:
- default
- a25dashboardad_default
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: arm_maildev
ports:
- "1025:25"
- "1080:80"
redis:
image: "redis"
container_name: arm_redis
ports:
- "6379:6379"
networks:
a25dashboardad_default:
external: true
堆栈 B
version: '3'
services:
php:
image: armcanada/php7-mssql
container_name: a25_php
ports:
- "8001:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- database:database
database:
image: mysql:5.7.18
container_name: a25_mysql
environment:
- "MYSQL_DATABASE=a25_db"
- "MYSQL_USER=user"
- "MYSQL_PASSWORD=password"
- "MYSQL_ROOT_PASSWORD=password"
ports:
- "33060:3306"
volumes:
- db:/var/lib/mysql
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: a25_maildev
ports:
- "1026:25"
- "1081:80"
volumes:
db:
networks:
default:
driver: bridge
来自arm_php:
作品:curl 172.19.0.4:8000/api/dmt
无效:curl a25_php:8000/api/dmt?key=8009829dedabad1e44263cf845484f14
我终于能够通过将用户定义的网络与别名结合使用来使其工作。详情如下:
堆栈 A
version: '3'
services:
php:
build:
context: .
dockerfile: ./dev.dockerfile
container_name: arm_php
ports:
- "8000:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- redis:redis
external_links:
- a25_mysql_1:a25_mysql
networks:
- default
- a25dashboardad_default
- a25dashboardad_armnet
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: arm_maildev
ports:
- "1025:25"
- "1080:80"
redis:
image: "redis"
container_name: arm_redis
ports:
- "6379:6379"
networks:
a25dashboardad_default:
external: true
a25dashboardad_armnet:
external: true
堆栈 B
version: '3'
services:
php:
image: armcanada/php7-mssql
container_name: a25_php
networks:
default:
aliases:
- default
armnet:
aliases:
- a25php
ports:
- "8001:8000"
volumes:
- ./:/app
links:
- maildev:maildev
- database:database
database:
image: mysql:5.7.18
container_name: a25_mysql
ports:
- "33060:3306"
volumes:
- db:/var/lib/mysql
maildev:
image: djfarrelly/maildev
hostname: residencia-maildev
container_name: a25_maildev
ports:
- "1026:25"
- "1081:80"
volumes:
db:
networks:
armnet:
driver: bridge
然后我可以使用 curl a25php:8000
.
原因如文档所说: Docker 不支持默认桥接网络上的自动服务发现。如果您希望容器能够通过容器名称解析 IP 地址,您应该改用用户定义的网络。 https://docs.docker.com/v17.09/engine/userguide/networking/#user-defined-networks