与docker composer共享网络docker容器中的卷失败
我有两个与docker composer共享网络docker容器中的卷失败,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有两个docker compose.yml文件 第一个是全局的,我用它来配置nginxwebserver,另一个我用它来保存应用程序代码,下面是它们的配置 第一个是nginx配置 version: '3' services: app: build: context: . dockerfile: Dockerfile image: globaldocker container_name: app restart: unless-stopped
docker compose.yml
文件
第一个是全局的,我用它来配置nginxwebserver,另一个我用它来保存应用程序代码,下面是它们的配置
第一个是nginx配置
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: globaldocker
container_name: app
restart: unless-stopped
tty: true
working_dir: /var/www
volumes:
- ./:/var/www
- ./dockerconfig/php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- common_network
webserver:
image: nginx
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./dockerconfig/nginx/:/etc/nginx/conf.d/
networks:
- webserver_network
- common_network
networks:
common_network:
external: false
webserver_network:
external: false
app:
build:
context: .
dockerfile: Dockerfile
image: posapp/php
container_name: envanto_pos
restart: unless-stopped
tty: true
working_dir: /var/www/pos
volumes:
- ./:/var/www/pos
- ./dockerconfig/nginx/:/etc/nginx/conf.d/
networks:
- globaldocker_webserver_network
networks:
globaldocker_webserver_network:
external: true
上面创建了两个网络
global_docker_common_network, global_docker_webserver_network
docker config文件夹中有一个nginx配置,如
server {
listen 80;
server_name pos.test www.pos.test;
index index.php index.html;
//other nginx configurations for pos.test
}
在docker上使用php文件编写配置
现在保存pos.test源代码的那一个有以下配置
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: globaldocker
container_name: app
restart: unless-stopped
tty: true
working_dir: /var/www
volumes:
- ./:/var/www
- ./dockerconfig/php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- common_network
webserver:
image: nginx
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./dockerconfig/nginx/:/etc/nginx/conf.d/
networks:
- webserver_network
- common_network
networks:
common_network:
external: false
webserver_network:
external: false
app:
build:
context: .
dockerfile: Dockerfile
image: posapp/php
container_name: envanto_pos
restart: unless-stopped
tty: true
working_dir: /var/www/pos
volumes:
- ./:/var/www/pos
- ./dockerconfig/nginx/:/etc/nginx/conf.d/
networks:
- globaldocker_webserver_network
networks:
globaldocker_webserver_network:
external: true
我已经添加了外部网络
当我尝试访问nginx pos.test时,它不显示应用程序,只显示默认的nginx页面
我已经尝试访问第一个docker nginx配置bash并检查了var/www/pos文件夹,但是我看不到第二个docker配置(源代码)中的文件
如何与我的nginx docker配置容器共享卷,以便当我通过暴露端口80访问docker时,能够访问我的站点pos.test
为了让这一切顺利进行,我错过了什么
更新
这两个docker配置文件位于主机上的不同文件夹中
问题的最新情况
这是我的nginx配置文件
server {
listen 80;
server_name pos.test www.pos.test;
index index.php index.html;
error_log /var/log/nginx/pos_error.log;
access_log /var/log/nginx/pos_access.log;
root /var/www/pos/web;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}您正在装载docker compose文件的当前目录。因此,唯一的容器将具有驻留在同一源代码目录中的源代码 你需要一些公共目录 第一档
volumes:
- /path_to_sc/common:/var/www
第二档
volumes:
- /path_to_sc/common:/var/www/pos
当我尝试访问Nginx pos.test时,它不会显示应用程序
但仅显示默认的Nginx页面
可能是第一个文件没有选择正确的配置。仔细检查/dockerconfig/nginx/:/etc/nginx/conf.d/
,或在docker内部运行命令以验证正确的配置文件
docker exec nginx bash -c "cat /etc/nginx/conf.d/filename.conf`
我尝试访问了第一个docker nginx配置bash和
检查了var/www/pos文件夹,但我看不到
第二个docker配置(源代码)
装载公共目录,以便两个容器都可以访问
更新:
从您的评论来看,docker compose文件中似乎存在语法错误。看看这个例子
web:
image: nginx
volumes:
- ./data:/var/www/html/
ports:
- 80:80
command: [nginx-debug, '-g', 'daemon off;']
web2:
image: nginx
volumes:
- ./data:/var/www/html
command: [nginx-debug, '-g', 'daemon off;']
“当我尝试访问nginx pos.test时,它不显示应用程序,只显示默认的nginx页面”-听起来像是nginx proxy\u pass配置问题,可以发布nginx.conf吗?不确定您需要共享卷,只需正确配置代理以将连接传递到您的应用程序。我已经共享了nginx config文件,它应该显示php文件。我收到一个错误卷必须是一个映射,不是字符串。docker compose文件中似乎有错误我已添加了它们,但卷仍未映射我仍无法访问Nginx上的第二个文件卷查看此问题我已发布了更好的解释,但对于此问题,答案应被接受,因为它起作用并回答了此问题。研究其他问题