我无法部署该项目。 docker-compose 和 nginx 的问题
Posted
技术标签:
【中文标题】我无法部署该项目。 docker-compose 和 nginx 的问题【英文标题】:I cannot deploy the project. Problem with docker-compose and nginx 【发布时间】:2020-09-06 11:59:54 【问题描述】:yii2中有一个工作脚本,我无法部署它。 Docker 构建项目,一切都很好,但是如果我将 nginx 配置从 docker 替换为 nginx/sites-available/default,则会出现错误: nginx:在 /etc/nginx/sites-enabled/default:111 的上游“app:9000”中找不到 [emerg] 主机 我在论坛上读到我需要添加depends_on 指令: 取决于: -应用程序 但在这种情况下,错误开始出现在: docker-compose -f docker-compose.yml up -d
我替换了不同的版本 - 从“1”到“3.4”,仍然出现错误。这是最后一个: 错误:撰写文件“./docker-compose.yml”无效,因为: services.environment 不支持的配置选项:'XDEBUG_CONFIG' 无效的***属性“环境”。此 Compose 文件的有效***部分是:服务、版本、网络、卷和以“x-”开头的扩展。
您可能会看到此错误,因为您使用了错误的 Compose 文件版本。指定支持的版本(例如“2.2”或“3.3”)并将您的服务定义放在services
键下,或者省略version
键并将您的服务定义放在文件的根目录以使用版本1.
有关 Compose 文件格式版本的更多信息,请参阅 https://docs.docker.com/compose/compose-file/
该项目仅适用于 php-7.0
这是原始(来自项目)nginx 配置:
## FRONTEND ##
server
listen 80 default;
root /app/frontend/web;
index index.php index.html;
server_name yii2-starter-kit.dev;
charset utf-8;
# location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js)$
# access_log off;
# expires max;
#
location /
try_files $uri $uri/ /index.php?$args;
client_max_body_size 32m;
# There is a VirtualBox bug related to sendfile that can lead to
# corrupted files, if not turned-off
# sendfile off;
location ~ \.php$
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-fpm;
fastcgi_index index.php;
include fastcgi_params;
## Cache
# fastcgi_pass_header Cookie; # fill cookie valiables, $cookie_phpsessid for exmaple
# fastcgi_ignore_headers Cache-Control Expires Set-Cookie; # Use it with caution because it is cause SEO problems
# fastcgi_cache_key "$request_method|$server_addr:$server_port$request_uri|$cookie_phpsessid"; # generating unique key
# fastcgi_cache fastcgi_cache; # use fastcgi_cache keys_zone
# fastcgi_cache_path /tmp/nginx/ levels=1:2 keys_zone=fastcgi_cache:16m max_size=256m inactive=1d;
# fastcgi_temp_path /tmp/nginx/temp 1 2; # temp files folder
# fastcgi_cache_use_stale updating error timeout invalid_header http_500; # show cached page if error (even if it is outdated)
# fastcgi_cache_valid 200 404 10s; # cache lifetime for 200 404;
# or fastcgi_cache_valid any 10s; # use it if you want to cache any responses
## BACKEND ##
server
listen 80;
root /app/backend/web;
index index.php index.html;
server_name backend.yii2-starter-kit.dev;
charset utf-8;
client_max_body_size 16m;
# There is a VirtualBox bug related to sendfile that can lead to
# corrupted files, if not turned-off on Vagrant based setup
# sendfile off;
location /
try_files $uri $uri/ /index.php?$args;
# location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js)$
# access_log off;
# expires max;
#
location ~ \.php$
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-fpm;
fastcgi_index index.php;
include fastcgi_params;
## STORAGE ##
server
listen 80;
server_name storage.yii2-starter-kit.dev;
root /app/storage/web;
index index.html;
# expires max;
# There is a VirtualBox bug related to sendfile that can lead to
# corrupted files, if not turned-off
# sendfile off;
location /
try_files $uri $uri/ /index.php?$args;
location ~ \.php$
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-fpm;
fastcgi_index index.php;
include fastcgi_params;
## PHP-FPM Servers ##
upstream php-fpm
server app:9000;
## MISC ##
### WWW Redirect ###
#server
# listen 80;
# server_name www.yii2-starter-kit.dev;
# return 301 http://yii2-starter-kit.dev$request_uri;
#
原始(来自项目)docker-compose.yml
data:
image: busybox:latest
volumes:
- ./:/app
entrypoint: tail -f /dev/null
app:
build: docker/php
working_dir: /app
volumes_from:
- data
expose:
- 9000
links:
- db
- mailcatcher
environment:
XDEBUG_CONFIG: "idekey=PHPSTORM remote_enable=On remote_connect_back=On"
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./:/app
- ./docker/nginx/vhost.conf:/etc/nginx/conf.d/vhost.conf
links:
- app
mailcatcher:
image: schickling/mailcatcher:latest
ports:
- "1080:1080"
db:
image: mysql:5.7
volumes:
- /var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: yii2-starter-kit
MYSQL_USER: ysk_dbu
MYSQL_PASSWORD: ysk_pass
请帮助为 nginx 和 docker-compose 进行正确的配置。
yii2 新手。 我将非常感谢任何帮助和建议。
提前谢谢你!
【问题讨论】:
【参考方案1】:在顶层没有version:
键的撰写文件是version 1 Compose file。这是 Compose YAML 文件格式的非常旧版本,不支持网络、卷或其他现代 Compose 功能。您应该选择版本 2 或 3。(版本 3 更面向 Docker 的 Swarm 编排器,因此对于单主机设置中的某些特定选项,您可能需要指定版本 2。)您需要指定***version:
密钥,然后您需要的服务进入*** services:
密钥。
version: '3.8'
services:
app: ...
nginx: ...
mailcatcher: ...
db: ...
这实际上将直接解决您当前的问题。正如Networking in Compose 中所讨论的,Compose(带有版本 2 或 3 配置文件)将为您创建一个default
网络并注册容器,以便它们的服务名称(如app
)可用作主机名。您不需要links:
或其他配置。
在您显示的 Compose 文件中还有许多其他不必要的选项。您不需要将图像的WORKDIR
重复为容器的working_dir:
;您不需要expose:
端口(与将ports:
发布到主机不同);将获取COPY
ed 的代码覆盖到来自主机的带有volumes:
的图像中并不是一个很好的做法。
在现代 Docker 中,您也倾向于不使用数据卷容器。相反,较新版本的 Compose 具有可以声明命名卷的 top-level volumes:
key。例如,您可以将其用于后备数据库存储。
所有这些的最终结果将是一个 Compose 文件,例如:
# Specify a current Compose version.
version: '3.8'
# Declare that we'll need a named volume for the database storage.
volumes:
mysql_data:
# The actual Compose-managed services.
services:
app:
build:
# If the application is in ./app, then the build context
# directory must be the current directory (to be able to
# COPY app ./
# ).
context: .
dockerfile: docker/php/Dockerfile
environment:
XDEBUG_CONFIG: "idekey=PHPSTORM remote_enable=On remote_connect_back=On"
nginx:
# Build a separate image that will also
# FROM nginx
# COPY app /usr/share/nginx/html
# COPY docker/nginx/vhost.conf /etc/nginx/conf.d
build:
context: .
dockerfile: docker/nginx/Dockerfile
ports:
- "80:80"
mailcatcher:
image: schickling/mailcatcher:latest
ports:
- "1080:1080"
db:
image: mysql:5.7
volumes:
# Use the named volume we declared above
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: yii2-starter-kit
MYSQL_USER: ysk_dbu
MYSQL_PASSWORD: ysk_pass
【讨论】:
以上是关于我无法部署该项目。 docker-compose 和 nginx 的问题的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose 部署 Vue+SpringBoot 前后端分离项目