docker - 使用 docker composer 在联网的 docker 容器中共享卷失败
问题描述
我有两个docker-compose.yml
文件
第一个是全局的,用它来配置 nginx 网络服务器,另一个用它来保存应用程序代码,下面是它们的配置
第一个使用 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
以上创建了两个网络
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
}
使用 php 文件进行 docker-compose 配置
现在持有 pos.test 源代码的那个我有以下配置
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 config(源代码)中的文件。
如何与我的 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 config(源代码)中的文件。
挂载公共目录,以便两个容器都可以访问。
更新:
根据您的评论,您的 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;']
推荐阅读
- jquery - 如何显示
- 悬停在
- 使用 display:block 以动画形式出现非常缓慢
- 悬停在
- angular - 在 ionic 3 中访问 3 维数组
- swift - Swift Vapor:如何读取 JSON 文件?
- python - 当在函数内的 if 语句的条件中使用全局变量时,Python 会抛出 UnboundLocalError
- ios - 执行自动转场
- javascript - 如何通过按下选项卡按钮遍历 div 并显示其全部内容
- hyperledger-fabric - 在 Hyperledger Composer 中验证和处理交易提案请求
- ionic-framework - Ionic 3 popover on select,如何使用检查图标而不是圆圈?
- karate - 当任何一个步骤失败时,Karate -TestNG 停止执行
- ethereum - Solidity:在映射中检索结构数组的值