我正在尝试链接2个单独的容器:
问题是php脚本不起作用。也许php-fpm配置不正确。这是源代码,位于我的资源库中。这是文件docker-compose.yml:
docker-compose.yml
nginx: build: . ports: - "80:80" - "443:443" volumes: - ./:/var/www/test/ links: - fpm fpm: image: php:fpm ports: - "9000:9000"
以及Dockerfile我用来基于nginx构建自定义图片的图片:
Dockerfile
FROM nginx # Change Nginx config here... RUN rm /etc/nginx/conf.d/default.conf ADD ./default.conf /etc/nginx/conf.d/
最后,这是我自定义的Nginx虚拟主机配置:
server { listen 80; server_name localhost; root /var/www/test; error_log /var/log/nginx/localhost.error.log; access_log /var/log/nginx/localhost.access.log; location / { # try to serve file directly, fallback to app.php try_files $uri /index.php$is_args$args; } location ~ ^/.+\.php(/|$) { fastcgi_pass 192.168.59.103:9000; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; } }
有人可以帮助我正确配置这些容器以执行php脚本吗?
PS 我像这样通过docker-composer运行容器:
docker-compose up
从项目根目录。
不要在nginx config中对容器的ip进行硬编码,docker link将链接机器的主机名添加到容器的hosts文件中,您应该能够按主机名ping。
编辑:Docker 1.9 Networking不再需要您链接容器,当多个容器连接到同一网络时,它们的主机文件将被更新,以便它们可以通过主机名相互访问。
每次docker容器从映像启动(甚至停止/启动现有容器)时,这些容器都会获得docker主机分配的新IP。这些ip与您的实际计算机不在同一子网中。
查看docker链接文档(这是compose在后台使用的内容)
但docker- compose在链接和公开文档中更清楚地解释了
docker- compose
链接 links: - db - db:database - redis 别名名称的条目将在此服务的容器内的/ etc / hosts中创建,例如: 172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis 暴露 在不将端口 发布到主机的情况下 公开端口-只有 链接的服务 才能 访问 它们。只能指定内部端口。
链接
links: - db - db:database - redis
别名名称的条目将在此服务的容器内的/ etc / hosts中创建,例如:
172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis
暴露
在不将端口 发布到主机的情况下 公开端口-只有 链接的服务 才能 访问 它们。只能指定内部端口。
如果您设置项目以通过环境变量获取端口和其他凭据,则链接会自动设置一堆系统变量:
要查看哪些环境变量可用于服务,请运行docker-compose run SERVICE env。 name_PORT 完整网址,例如DB_PORT = tcp://172.17.0.5:5432 name_PORT_num_protocol 完整网址,例如 DB_PORT_5432_TCP=tcp://172.17.0.5:5432 name_PORT_num_protocol_ADDR 容器的IP地址,例如 DB_PORT_5432_TCP_ADDR=172.17.0.5 name_PORT_num_protocol_PORT 公开的端口号,例如 DB_PORT_5432_TCP_PORT=5432 name_PORT_num_protocol_PROTO 协议(tcp或udp),例如 DB_PORT_5432_TCP_PROTO=tcp name_NAME 完全合格的容器名称,例如 DB_1_NAME=/myapp_web_1/myapp_db_1
要查看哪些环境变量可用于服务,请运行docker-compose run SERVICE env。
docker-compose run SERVICE env
name_PORT
完整网址,例如DB_PORT = tcp://172.17.0.5:5432
name_PORT_num_protocol
完整网址,例如 DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
name_PORT_num_protocol_ADDR
容器的IP地址,例如 DB_PORT_5432_TCP_ADDR=172.17.0.5
DB_PORT_5432_TCP_ADDR=172.17.0.5
name_PORT_num_protocol_PORT
公开的端口号,例如 DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PORT=5432
name_PORT_num_protocol_PROTO
协议(tcp或udp),例如 DB_PORT_5432_TCP_PROTO=tcp
DB_PORT_5432_TCP_PROTO=tcp
name_NAME
完全合格的容器名称,例如 DB_1_NAME=/myapp_web_1/myapp_db_1
DB_1_NAME=/myapp_web_1/myapp_db_1