是否可以将 docker 容器 A 上的端口 XXXX 绑定到 docker 容器 B 上的端口 XXXX 或 YYYY
Is it possible to bind port XXXX on a docker container A to port XXXX or YYYY on docker container B
假设我有一个 docker-compose 文件如下:
version: '2'
services:
# The php-fpm container
app:
build:
context: ./
dockerfile: app.dev.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
expose:
- 8003
# The Web Server
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes_from:
- app
links:
- app:app
ports:
- 80:80
- 8004:8003
所以我喜欢从 Web 容器中的端口 8004 为 App 容器上的端口 8003 提供服务。
但我无法得到结果。
所以我的猜测是 Web 容器上 8004:8003 的 Web 端口映射仅限于 Web 容器。
或者它实际上映射到应用程序容器上暴露的 8003 端口?
如果是,我如何测试 Web 端口 8004 实际上映射到 App 容器上的端口 8003?
有没有办法创建单向绑定(或更好的双向绑定)或将 App 容器上的端口 8003 映射到 Web 容器上的端口 8004?
如果我的主机是 运行 一些 App 和 docker 服务(包括这两个容器),并且 App 正在尝试侦听 Web 容器中的端口 8004 他实际上正在与 App 通信容器。
容器旨在使每个进程保持独立。每个 process/container 都有自己独立的网络堆栈
您描述的从一个容器到另一个容器的唯一方法 "mapping" 是如果有一个用户 space 进程转发请求。就像 Apache http 或 Nginx 将 HTTP 请求转发到 FastCGI PHP 进程一样。
对于调试,将端口直接映射到 app
容器。如果您无法连接,可能是 app
容器中的调试设置有问题。
# The php-fpm container
app:
build:
context: ./
dockerfile: app.dev.dockerfile
working_dir: /var/www
volumes:
- './:/var/www'
ports:
- '8003:8003'
# The Web Server
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes_from:
- app
ports:
- 80:80
顺便说一下,links
不需要版本 2+ 连接。默认情况下,Compose 将创建一个用户定义的网络,允许您的容器之间进行访问。
假设我有一个 docker-compose 文件如下:
version: '2'
services:
# The php-fpm container
app:
build:
context: ./
dockerfile: app.dev.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
expose:
- 8003
# The Web Server
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes_from:
- app
links:
- app:app
ports:
- 80:80
- 8004:8003
所以我喜欢从 Web 容器中的端口 8004 为 App 容器上的端口 8003 提供服务。 但我无法得到结果。 所以我的猜测是 Web 容器上 8004:8003 的 Web 端口映射仅限于 Web 容器。 或者它实际上映射到应用程序容器上暴露的 8003 端口?
如果是,我如何测试 Web 端口 8004 实际上映射到 App 容器上的端口 8003?
有没有办法创建单向绑定(或更好的双向绑定)或将 App 容器上的端口 8003 映射到 Web 容器上的端口 8004?
如果我的主机是 运行 一些 App 和 docker 服务(包括这两个容器),并且 App 正在尝试侦听 Web 容器中的端口 8004 他实际上正在与 App 通信容器。
容器旨在使每个进程保持独立。每个 process/container 都有自己独立的网络堆栈
您描述的从一个容器到另一个容器的唯一方法 "mapping" 是如果有一个用户 space 进程转发请求。就像 Apache http 或 Nginx 将 HTTP 请求转发到 FastCGI PHP 进程一样。
对于调试,将端口直接映射到 app
容器。如果您无法连接,可能是 app
容器中的调试设置有问题。
# The php-fpm container
app:
build:
context: ./
dockerfile: app.dev.dockerfile
working_dir: /var/www
volumes:
- './:/var/www'
ports:
- '8003:8003'
# The Web Server
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes_from:
- app
ports:
- 80:80
顺便说一下,links
不需要版本 2+ 连接。默认情况下,Compose 将创建一个用户定义的网络,允许您的容器之间进行访问。