与Docker Composer共享网络Docker容器中的卷失败

时间:2019-08-27 16:33:57

标签: docker docker-compose dockerfile

我有两个docker-compose.yml文件

第一个是全局的,正在使用它来配置nginx Web服务器,另一个正在使用它来保存应用程序代码,下面是它们的配置

第一个使用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;
}

}

1 个答案:

答案 0 :(得分:1)

您正在分别安装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;']