Articles of docker

如何在Nginx上游使用Docker群集DNS /服务名称

我有一个跨4个群集节点(ServiceA)和一个在同一个Swarm上的4个节点上运行的Nginx服务的服务。 Nginx的服务公开/发布端口80和443.所有的服务连接到同一个用户定义的覆盖networking,最重要的是我可以从容器中遏制/ ping服务名称(ServiceA),所以所有的工作到目前为止。 我的问题是如何让Nginx上游使用服务名称? 我读了很多,试着把这个添加到nginx.conf resolver 127.0.0.11 ipv6=off; 但没有帮助,Nginx的服务不会启动。 关于如何获取Nginx的任何想法,请参阅DockernetworkingDNS名称? 这是我的nginx.conf events { worker_connections 4096; } http { include /etc/nginx/conf/*.conf; include /etc/nginx/mime.types; proxy_intercept_errors off; proxy_send_timeout 120; proxy_read_timeout 300; upstream serviceA { ip_hash; server serviceA:8081; } server { listen 80 default_server; resolver 127.0.0.11 ipv6=off; keepalive_timeout 5 5; proxy_buffering off; underscores_in_headers on; location ~ ^/serviceA(?<section>.*) { access_log […]

Nginx后面的Traefik Docker Swarm模式真实IP

我在Docker群环境中使用Traefik作为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" 一切工作正常,但我需要在我的Nginx访问日志中的真实客户端IP,而不是我得到像10.0.1.37 我如何才能真正的客户端IP? 谢谢,

你应该在Docker中安装nginx吗?

我想知道你的Docker镜像里面有没有nginx的优点和缺点。 有很多关于如何在docker上安装nginx的教程,但是我问的是,你应该还是不应该? 你应该在docker主机上安装nginx,并指向运行中的容器(可以运行彩虹等)? 要么 你应该在你的容器中安装另一个nginx层吗? 我没有看到在Docker容器中有另一个nginx的好处,但是我想知道为什么有这么多的教程,就好像这是常识,而我没有得到常识,这使我感到沮丧。 编辑: 每个容器的configuration越less,对我来说就越好。 如果nginx容器和后面的应用程序容器之间有紧密的耦合,那么它肯定不是我正在寻找的解决scheme,并且首先打破了容器的目的。 这就是为什么我倾向于在Docker主机上安装nginx。 如果我们要有一个nginx容器,容器应该独立于应用程序。 应用程序特定的configuration(如端口号和IP地址,工作进程数, client_max_body_size不应configuration到容器中,除非在执行docker run时可以自定义。

Docker Django nginx gunicorn URL丢弃端口

首先道歉,如果这是一个重复的,但我还没有find通过类似的职位在SO显示的解决scheme 我有一个使用nginx和gunicorn的Docker Django镜像。 Gunicorn脚本: exec /var/www/venv/bin/gunicorn wsgi:application \ –bind 0.0.0.0:8001 \ –access-logfile /var/log/gunicorn/access.log \ –error-logfile /var/log/gunicorn/error.log Nginxconfiguration: server { server_name 172.0.0.1; access_log off; location / { proxy_pass http://127.0.0.1:8001; proxy_set_header Host $host:$server_port; } location /static/ { autoindex on; alias /var/www/django/assets/; expires 7d; } } 我公开端口80和映射到49260。 当浏览到docker主机的外部IP包括站点发布的端口,并提供静态文件。 http://xxx.xx.xx.xxx:49260/ 问题是,当我导航到Django站点中的任何其他页面时,映射的端口从主机服务器ngnixconfiguration然后拿起的URL丢弃。 我试图实现的是维护URL中的端口,我可以稍后从主机服务器反向代理。 任何意见将非常感激。

PHP版本在phpinfo()输出中是错误的

我运行我的web应用程序在nginx服务器上的debian wheezy上的php-fpm版本,在docker集装箱内。 我更新我的PHP版本到5.6.1。 RUN echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list RUN echo "deb-src http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list RUN echo "deb http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list RUN echo "deb-src http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list RUN wget http://www.dotdeb.org/dotdeb.gpg RUN apt-key add dotdeb.gpg RUN apt-get update RUN apt-get install -y nginx php5-fpm php5-mysqlnd php5-cli supervisor 如果我在我的容器中执行以下命令,版本可以,似乎正确更新: […]

为什么在尝试装入卷时,Docker无法打开nginx.conf?

我在OS X上。首先,我使用docker pull nginx从Docker中心获取正式映像。 接下来,我在我的主机上创build了一个文件夹,我试图将nginxconfiguration目录映射到主机上(不知道哪个白话是正确的)。 所以,我试了这个。 docker run -p 80:80 –rm -v /Users/me/helloworld/nginx/conf:/etc/nginx/ nginx 但是,这个命令导致了这一点。 2015/05/08 23:42:47 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 我检查了容器内部,我可以确认文件存在。

无法将泊坞窗图像推送到artifactory

我设置了artifactory作为dockerregistry,并试图将图像推送到它 docker push nginxLoadBalancer.mycompany.com/repo_name:image_name 这会失败,并出现以下错误 The push refers to a repository [ nginxLoadBalancer.mycompany.com/repo_name] (len: 1) unable to ping registry endpoint https://nginxLoadBalancer.mycompany.com/v0/ v2 ping attempt failed with error: Get https://nginxLoadBalancer.mycompany.com/v2/: Bad Request v1 ping attempt failed with error: Get https://nginxLoadBalancer.mycompany.com/v1/_ping: Bad Request 这是我的nginx conf upstream artifactory_lb { server mNginxLb.mycompany.com:8081; server mNginxLb.mycompany.com backup; } log_format upstreamlog '[$time_local] […]

端口80上的多个Docker容器具有相同的域

我的问题类似于这个问题,但只有一个域。 是否有可能在同一台服务器上运行多个docker容器,所有这些容器都在端口80上,但具有不同的URLpath? 例如: 在内部,所有的应用程序托pipe在同一个docker服务器上。 172.17.0.1:8080 => app1 172.17.0.2:8080 => app2 172.17.0.3:8080 => app3 在外部,用户将通过以下URL访问应用程序: www.mydomain.com (app1) www.mydomain.com/app/app2 (app2) www.mydomain.com/app/app3 (app3)

如何将nginx用作Bluemix上的dynamic负载平衡代理服务器?

我正在使用docker-compose在bluemix容器服务上运行应用程序。 我使用nginx作为代理networking服务器和负载均衡器。 我发现了一个使用docker事件来自动检测新的Web服务器并将它们dynamic添加到nginxconfiguration中的图像: https://github.com/jwilder/nginx-proxy 但为了这个工作,我认为容器需要连接到一个dockersockets。 我不是很熟悉docker,我不知道这是什么,但基本上这是必要的,使图像可以听泊坞的事件。 图像文档中的运行命令如下所示: docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy 我一直无法在容器服务中运行它,因为它在主机上找不到/var/run/docker.sock文件。 bluemix文档有一个解释如何使用nginx进行负载平衡的教程 。 但是它需要在nginxconfiguration中有一个“硬编码”的web服务器列表。 我想知道如何运行nginx-proxy镜像,以便自动检测web实例?

Docker:LetsEncrypt开发“Https无处不在”

在开发,testing和分期的过程中,我们有各种各样的作为虚拟机来来去去的docker服务器。 最终,在这个过程中的docker图像将会到达具有明确定义的主机和域名的客户机器。 但是,直到那一刻,所有的机器都只是我们的内部networking。 在客户部署的环境中,所有'http'通信都是通过HTTPS进行内部或外部通信。 鉴于这一意图,非常希望将所有容器连接到可用/可testing的SSL证书。 很多docker / letsencrypt / nginx教程的一 , 二 , 三 ,等等,都描述了如何在最后做到这一点,而不是在开发过程中。 有谁知道如果这样一个集中的设置是可能的? 我是否需要制造最内层的docker集装箱(我们恰好安置了一个Tomcat webapp)有一个公共领域? 或者这是完全不切实际的(即使知道这肯定会有很大的帮助! 如果这种用法是可能的,可能有人知道(或具体)需要做些什么来实现这个function? UPDATE 如果从上面不清楚的话。 我想运送Docker容器,其中一个可能是一个letsencrypt / nginx代理。 Docker Hub上有很多可供select的选项。 但是,我不知道如何设置这样一个系统的开发/testing,所有的机器都在内部networking上。 证书可以是“testing” – 需要允许HTTPS / TLS,而不是Chrome中的绿色locking! 这将允许进行大量的testing(即HTTP正确locking,closuresTLSv1.0以避免某些漏洞等)。