我正在尝试设置多个可以通过一个主容器访问的docker容器。
例如:
http://localhost:80
是主要容器
http://localhost:80/site1
是一个单独的容器
http://localhost:80/site2
再次是一个单独的容器
我知道--link
标志已被弃用,新的处理方式是使用--network
标志。
当我使用--link
(用于测试)时,我在hosts文件中看到了我要链接的容器的条目。这就是我被困住的地方。
所以我想使用docker --networking选项设置上面的场景。
用例:/Site1
可能是网站的管理区域或成员,但我希望将它们放在不同的容器中,这样我就可以更轻松地维护它们。
容器是基于apache2的,但如果可能的话,我希望不要编辑任何配置文件(但我可以,如果需要)
我该怎么做?
答案 0 :(得分:1)
据我所知,docker无法将HTTP请求路由到一个或另一个容器。您只能将主机中的端口映射到一个容器。
您需要的是运行反向代理(例如nginx)作为主容器,然后将请求路由到相应的容器。
这里有一个如何设置的例子
FROM node:6.11
WORKDIR /site1
COPY site1.js .
CMD node site1.js
EXPOSE 80
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World 1\n');
}).listen(80);
FROM node:6.11
WORKDIR /site2
COPY site2.js .
CMD node site2.js
EXPOSE 80
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World 2\n');
}).listen(80);
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;
}
}
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/site1和http://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: