我正在为生产 PHP-FPM/Nginx 应用程序运行 docker,我想使用 docker-stack.yml 并部署到 swarm 集群。这是我的文件:
version: "3"
services:
app:
image: <MYREGISTRY>/app
volumes:
- app-data:/var/www/app
deploy:
mode: global
php:
image: <MYREGISTRY>/php
volumes:
- app-data:/var/www/app
deploy:
replicas: 2
nginx:
image: <MYREGISTRY>/nginx
depends_on:
- php
volumes:
- app-data:/var/www/app
deploy:
replicas: 2
ports:
- "80:80"
volumes:
app-data:
Run Code Online (Sandbox Code Playgroud)
我的代码位于app带有来自我的注册表的图像的容器中。
我想更新我的代码,docker service update --image <MYREGISTRY>/app:latest但它不起作用代码没有改变。我猜它使用本地卷app-data代替。
新容器数据不覆盖卷数据是否正常?
我想将配置参数从 docker-compose 文件传递到我的 Symfony 应用程序,我试过这个:
app:
image: <NGINX + PHP-FPM IMAGE>
environment:
DATABASE_HOST: db
Run Code Online (Sandbox Code Playgroud)
我的 parameters.yml 文件:
database_host: "%env(DATABASE_HOST)%"
Run Code Online (Sandbox Code Playgroud)
我收到错误 500“找不到环境变量:DATABASE_HOST”
我也在 docker-compose 中尝试了 SYMFONY__DATABASE_HOST 但也没有工作。
它是如何工作的?
我正在使用Traefik作为docker swarm环境上nginx服务之前的反向代理。这是我的docker-stack.yml:
traefik:
image: traefik
command: -c /dev/null --web --docker --docker.swarmmode --docker.watch --docker.domain=domain --logLevel=DEBUG
ports:
- "8080:8080"
- "80:80"
- "443:443"
networks:
- app
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
placement:
constraints: [node.role == manager]
nginx:
image: nginx
networks:
- app
deploy:
labels:
traefik.port: 80
traefik.docker.network: app
traefik.frontend.rule: "Host:app.domain"
Run Code Online (Sandbox Code Playgroud)
一切正常,但是我需要在Nginx访问日志中使用真实的客户端IP,相反,我得到的信息类似于10.0.1.37
如何获得真实的客户IP?
谢谢,