我试图允许nginx在多个容器之间进行代理,同时也从这些容器访问静态文件。
若要在使用docker组合创建的容器之间共享卷,以下操作正确:
version: '3.6'
services:
web:
build:
context: .
dockerfile: ./Dockerfile
image: webtest
command: ./start.sh
volumes:
- .:/code
- static-files:/static/teststaticfiles
nginx:
image: nginx:1.15.8-alpine
ports:
- "80:80"
volumes:
- ./nginx-config:/etc/nginx/conf.d
- static-files:/static/teststaticfiles
depends_on:
- web
volumes:
static-files:然而,我实际上需要的是nginx组合文件在一个单独的文件中,并且也位于一个完全不同的文件夹中。换句话说,docker compose up命令将单独运行。我尝试了以下几点:
第一份撰写文件:
version: '3.6'
services:
web:
build:
context: .
dockerfile: ./Dockerfile
image: webtest
command: ./start.sh
volumes:
- .:/code
- static-files:/static/teststaticfiles
networks:
- directorylocation-nginx_mynetwork
volumes:
static-files:
networks:
directorylocation-nginx_mynetwork:
external: true第二组文件(即: nginx):
version: '3.6'
services:
nginx:
image: nginx:1.15.8-alpine
ports:
- "80:80"
volumes:
- ./nginx-config:/etc/nginx/conf.d
- static-files:/static/teststaticfiles
networks:
- mynetwork
volumes:
static-files:
networks:
mynetwork:以上两个文件在可以查看站点的意义上正确工作。问题是,静态文件在nginx容器中不可用。因此,该网站显示没有任何图像等。
正确使用在这里发现的的一项工作是将nginx容器静态文件卷改为如下:
- /var/lib/docker/volumes/directory_static-files/_data:/static/teststaticfiles上面的工作原理是正确的,但它似乎“无趣”和易碎。是否有另一种方法在存放在不同组合文件中的容器之间共享卷,而不需要映射/var/lib/docker/volumes目录。
发布于 2019-01-05 13:00:40
通过像在问题中那样分离两个docker-compose.yml文件,实际上创建了两个不同的卷;这就是为什么在nginx服务卷中没有看到来自web服务的数据的原因,因为只有两个不同的卷。
示例:假设您有以下结构:
example/
|- web/
|- docker-compose.yml # your first docker compose file
|- nginx/
|- docker-compose.yml # your second docker compose file从web_static-files文件夹运行docker-compose up (或从example目录运行docker-compose -f web/docker-compose.yml up )实际上将创建一个名为example的卷( docker-compose.yml文件中定义的卷的名称,以该文件所在的文件夹为前缀)。
因此,从nginx_static-files文件夹中运行docker-compose up实际上将创建nginx,而不是根据您的需要重用web_static-files。
您可以使用web/docker-compose.yml创建的卷,方法是在第二个停靠器撰写文件(nginx/docker-compose.yml)中指定这是一个外部卷及其名称:
volumes:
static-files:
external:
name: web_static-files请注意,如果不希望卷(和所有资源)以文件夹名(默认)作为前缀,则可以将-p选项添加到docker-compose命令中:
docker-compose \
-f web/docker-compose.yml \
-p abcd \
up这个命令现在将创建一个名为abcd_static-files的卷(您可以在第二个停靠器撰写文件中使用该卷)。
您还可以在它自己的docker-compose文件(如volumes/docker-compose.yml)上定义卷创建:
version: '3.6'
volumes:
static-files:并在web和nginx docker-compose.yml文件中将此卷引用为外部卷(名为volumes_static-files ):
volumes:
volumes_static-files:
external: true不幸的是,您无法在docker中设置卷名,它将自动前缀。如果这确实是一个问题,您还可以在运行任何docker volume create static-files命令之前手动创建卷(我没有重新推荐此解决方案,因为它添加了一个手动步骤,如果您在另一个环境中重现部署,它会被遗忘)。
https://stackoverflow.com/questions/54051130
复制相似问题