将docker容器链接到另一个容器的子目录

时间:2017-08-19 00:40:01

标签: docker networking subdomain microservices

我正在尝试设置多个可以通过一个主容器访问的docker容器。

例如:
http://localhost:80是主要容器
http://localhost:80/site1是一个单独的容器
http://localhost:80/site2再次是一个单独的容器

我知道--link标志已被弃用,新的​​处理方式是使用--network标志。

当我使用--link(用于测试)时,我在hosts文件中看到了我要链接的容器的条目。这就是我被困住的地方。

所以我想使用docker --networking选项设置上面的场景。

用例:/Site1可能是网站的管理区域或成员,但我希望将它们放在不同的容器中,这样我就可以更轻松地维护它们。

容器是基于apache2的,但如果可能的话,我希望不要编辑任何配置文件(但我可以,如果需要)

我该怎么做?

2 个答案:

答案 0 :(得分:1)

据我所知,docker无法将HTTP请求路由到一个或另一个容器。您只能将主机中的端口映射到一个容器。

您需要的是运行反向代理(例如nginx)作为主容器,然后将请求路由到相应的容器。

这里有一个如何设置的例子

站点1 / Dockerfile

FROM node:6.11
WORKDIR /site1
COPY site1.js .
CMD node site1.js
EXPOSE 80

站点1 / site1.js

var http = require("http");

http.createServer(function (request, response) {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end('Hello World 1\n');
}).listen(80);

站点2 / Dockerfile

FROM node:6.11
WORKDIR /site2
COPY site2.js .
CMD node site2.js
EXPOSE 80

站点2 / site2.js

var http = require("http");

http.createServer(function (request, response) {
   response.writeHead(200, {'Content-Type': 'text/plain'});
   response.end('Hello World 2\n');
}).listen(80);

节点代理/ default.conf

server {
    listen 80;

    # ~* makes the /site1 case insensitive
    location ~* /site1 {
        # Nginx can access the container by the service name
        # provided in the docker-compose.yml file.
        proxy_pass http://node-site1;
    }

    location ~* /site2 {
        proxy_pass http://node-site2;
    }

    # Anything that didn't match the patterns above goes here
    location / {
        # proxy_pass http://some other container
        return 500;
    }
}

搬运工-compose.yml

version: "3"
services:

  # reverse proxy
  node-proxy:
    image: nginx
    restart : always
    # maps config file into the proxy container
    volumes:
      - ./node-proxy/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 80:80
    links:
      - node-site1
      - node-site2

  # first site
  node-site1:
    build:  ./site1
    restart: always

  # second site
  node-site2:
    build:  ./site2
    restart: always

要启动反向代理,两个站点都会输入此文件夹docker-compose up -d的根目录,并与docker ps -a一起检查所有docker容器是否正在运行。

之后,您可以使用http://localhost/site1http://localhost/site2

访问这两个网站

说明

文件夹site1和site2包含一个带有nodejs的小型Web服务器构建。它们都在侦听端口80.“node-proxy”包含配置文件,告诉nginx何时返回哪个站点。

以下是一些链接

答案 1 :(得分:0)

您应该使用卷,因此您将在docker-compose.yml这样设置

version: '3.2'
services:
    container1:
        volumes:
            - shared-files:/directory/files
    container2:
        volumes:
            - shared-files:/directory/files
    container3:
        volumes:
            - shared-files:/directory/files


volumes:
  shared-files: