使用域名从主机网络访问Docker



嘿,伙计们,我在主机B上有一个附加了域名的docker容器a。。。。。我如何通过A的域名而不是主机B的本地网络上的计算机C的B的ip地址或域名来访问所述容器A。

因此C -> A( via wwww.cname.url)而不是C -> B( www.bname.url:port) -> A

E。G.

下面是一个使用服务的docker组合

version: "3.2"
services:
php:
links:
- mysql
image: arm32v6/php:7.1.24-fpm-alpine3.8-lavalite
networks:
- backend
working_dir: /var/www/html
volumes:
- ./website/:/var/www/html/
privileged: true
node:
domainname: docker.local
hostname: node
networks:
frontend:
aliases:
- node.docker.local
links:
- "apache:dev.docker.local"
depends_on:
- apache
image: arm32v7/node:latest
entrypoint: yarn
command: twill-dev
volumes:
- ./website:/usr/src/app
working_dir: /usr/src/app
ports:
- "3000:3000"
- "3001:3001"
apache:
domainname: docker.local
hostname: dev
image: arm32v7/httpd:2.4
depends_on:
- php
- mysql
networks:
frontend:
aliases:
- apache
- dev.docker.local
backend:
aliases:
- apache
privileged: true
ports:
- "8880:80"
working_dir: /var/www/html
volumes:
- ./website/:/var/www/html/
- ./httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./fpm.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf
mysql:
image: yobasystems/alpine-mariadb:arm32v7
volumes:
- ./datadir:/var/lib/mysql
networks:
- backend
environment:
- MYSQL_VERSION=5.7
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=test
- MYSQL_PASSWORD=testpass
- MYSQL_DATABASE=test_db
networks:
frontend:
external:
name: localnet
backend:

我希望能够访问服务apache,其域名设置为dev.docker.local,其ip位于网络17.18.0.1/24

主机的IP位于网络192.168.1.0/24上,域名为dev.server.local

我在网络上有一台开发pc 192.168.1.0/24,它可以通过主机IP访问服务容器,通常是为特定服务公开的端口。

更新可以从网络外部访问server.local上的主机我的网络接口有以下条目

dns-search server.local
dns-domain server.local

码头集装箱有以下

主机名nginx域名服务器本地

我还需要编辑主机文件或resolv.conf文件吗?

主机似乎正在运行avahi服务发现。这会影响什么吗?

那么我可以吗

  • 将内部域设置为主机,并在子域上设置docker容器?外部设备如何通过域访问
  • 将docker容器连接到主机的网络上,从而具有192.168.1.0/24中的ip,并且能够被该网络上的设备ping到。域会解析为它吗
  • 有没有一个动态DNS软件我可以使用,可以连接到我,这样它就不是一个手动过程。因此,它将检测服务器并通过域名将传入请求路由到它

您可以通过将容器绑定到子域来配置nginx容器来实现这一点。

例如,主机可以通过域example.com访问,并且您希望php容器可以在php.example.com上访问,您可以使用如下设置:

services:
php:
image: arm32v6/php:7.1.24-fpm-alpine3.8-lavalite
environment:
- VIRTUAL_HOST=php.example.com
nginx-proxy:
image: jwilder/nginx-proxy
depends_on:
- php
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro

任何对子域的请求都会首先发送到主机,这是由nginx绑定的,nginx反过来注册,因为请求了子域php,所以它应该将用户发送到该容器。

我希望这能帮助你,如果你有任何问题,请让我知道

最新更新