我最近开始迁移到Docker1.9和Docker 1.5的网络功能,以取代使用链接。
到目前为止,在链接中,nginx连接到我的php5-fpm快速fpm服务器并没有问题,它位于一个组中的另一个服务器中,通过docker-组合。不过,当我运行docker-compose --x-networking up (我的php-fpm、mongo和nginx容器)启动时,nginx立即退出了[emerg] 1#1: host not found in upstream "waapi_php_1" in /etc/nginx/conf.d/default.conf:16。
但是,如果我在php和mongo容器运行(nginx退出)时再次运行docker命令,那么nginx将从那时起启动并正常工作。
这是我的docker-compose.yml文件:
nginx:
image: nginx
ports:
- "42080:80"
volumes:
- ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
php:
build: config/docker/php
ports:
- "42022:22"
volumes:
- .:/var/www/html
env_file: config/docker/php/.env.development
mongo:
image: mongo
ports:
- "42017:27017"
volumes:
- /var/mongodata/wa-api:/data/db
command: --smallfiles这是我的nginx的default.conf:
server {
listen 80;
root /var/www/test;
error_log /dev/stdout debug;
access_log /dev/stdout;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/.+\.php(/|$) {
# Referencing the php service host (Docker)
fastcgi_pass waapi_php_1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# We must reference the document_root of the external server ourselves here.
fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}我如何才能让nginx只使用一个码头-撰写电话?
发布于 2015-11-28 02:31:29
在引入volumes_from特性之前,有可能使用“depends_on”作为解决方案。您所要做的就是更改您的坞-撰写文件如下:
nginx:
image: nginx
ports:
- "42080:80"
volumes:
- ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
volumes_from:
- php
php:
build: config/docker/php
ports:
- "42022:22"
volumes:
- .:/var/www/html
env_file: config/docker/php/.env.development
mongo:
image: mongo
ports:
- "42017:27017"
volumes:
- /var/mongodata/wa-api:/data/db
command: --smallfiles上述方法中的一个重要警告是,php的卷暴露在nginx中,这是不需要的。但就目前而言,这是一个特定的解决方案,可以使用。
depends_on --这可能是一个未来主义的答案。因为该功能尚未在Docker中实现(从1.9开始)
有人建议在Docker引入的新的网络特性中引入"depends_on“。但是,对于相同的@ https://github.com/docker/compose/issues/374,有一个长期的争论,因此,一旦实现了它,就可以使用特性depends_on来命令容器启动,但是目前,您必须使用以下方法之一:
发布于 2016-08-19 13:05:35
这可以通过上面提到的depends_on指令来解决,因为它现在已经实现(2016年):
version: '2'
services:
nginx:
image: nginx
ports:
- "42080:80"
volumes:
- ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- php
php:
build: config/docker/php
ports:
- "42022:22"
volumes:
- .:/var/www/html
env_file: config/docker/php/.env.development
depends_on:
- mongo
mongo:
image: mongo
ports:
- "42017:27017"
volumes:
- /var/mongodata/wa-api:/data/db
command: --smallfiles成功地测试了:
$ docker-compose version
docker-compose version 1.8.0, build f3628c7在文档中可以找到更多细节。
还有一篇关于这个主题的非常有趣的文章:组合控制启动顺序
发布于 2018-02-14 04:21:25
如果你如此迷茫,请阅读最后一条评论。我已经找到了另一个解决办法。
主要问题是您命名服务名称的方式。
在这种情况下,如果在您的docker-compose.yml中,php的服务被称为"api“或类似的东西,那么您必须确保在文件nginx.conf中,以fastcgi_pass开头的行与php服务具有相同的名称。即fastcgi_pass api:9000;
假设php服务名为php_service,那么代码如下:
在文件docker-compose.yml中
php_service:
build:
dockerfile: ./docker/php/Dockerfile在文件nginx.conf中
location ~ \.php$ {
fastcgi_pass php_service:9000;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;
}https://stackoverflow.com/questions/33639138
复制相似问题