Nginx,WordPress和SQL

我现在正在学习如何使用docker,并想知道是否有一种方法来制作一个包含Wordpress,SQL和Nginx的Docker堆栈。

现在我想要有3个容器运行,每个1个,并使用nginx作为我的wordpress应用程序的反向代理。

然而,每次我试图通过一个作曲文件来获得这个堆栈,只有Wordpress和SQL被链接,而不是Nginx。

version: '2' services: db: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:fpm links: - db ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress nginx: restart: always image: nginx ports: - "80:80" 

这是我在我的docker-compose.yml中所有的

你的基本方法应该工作。 我有一个感觉是有configuration问题的地方,可能与nginx,阻止它的工作,你打算。

你可以尝试使用这个类似的docker-compose.yml文件作为示例,看看它可能与你正在做的不同:

docker-compose.yml

 version: '2' services: php: image: phpmyadmin/phpmyadmin links: - mysql:db depends_on: - mysql mysql: image: k0st/alpine-mariadb volumes: - ./data/mysql:/var/lib/mysql environment: - MYSQL_DATABASE=mydb - MYSQL_USER=myuser - MYSQL_PASSWORD=mypass nginx: image: nginx:stable-alpine ports: - "81:80" volumes: - ./nginx/log:/var/log/nginx - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/files:/var/www/nginx:ro depends_on: - php 

nginx/nginx.conf

 worker_processes 1; events { worker_connections 1024; } http { sendfile off; server { listen 80; location / { proxy_pass http://php; proxy_set_header Host $host; proxy_redirect off; } } } 

nginx的configuration是简化的,但应该为testing工作 – 基本上它所做的是代理的PHP应用程序。 映射到端口81以避免主机发生冲突。 (请注意,这只是一个粗略的演示,需要更多的使用。)

关于链接,你可以看到,如果你运行: docker-compose exec mysql ping -c2 nginx从mysql容器ping到nginx容器,即使这些容器之间没有指定链接,你也会成功。 Docker Compose会将这些链接保留在默认networking中。

如果你愿意的话,你可以从这个仓库中取得一个工作版本,然后运行docker-compose up ,(假设你没有任何东西在端口81上运行)在http:// localhost:81 /上查看结果相应的主机名/ IP是)。

有关Docker撰写networking的更多信息,请参阅: https : //docs.docker.com/compose/networking/

默认情况下,Compose会为您的应用程序设置一个networking。 服务的每个容器都join默认networking,并且该networking上的其他容器都可以访问它们,并且可以通过与容器名称相同的主机名来发现它们。

链接允许您定义额外的别名,通过这些别名可以从另一个服务访问服务。 他们不需要启用服务进行通信 – 默认情况下,任何服务都可以以该服务的名称到达任何其他服务。

你可以使用jwilder-nginx的docker镜像。 它使用docker-gen来检测容器,并将它们注册到nginx.conf中。

这应该工作,如果添加“VIRTUAL_HOST”该域将被添加到nginx.conf。 请注意:您不必使用此安装程序公开WordPress上的端口。 jwilder-nginx将使用默认端口转发stream量。

 version: '2' services: db: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:fpm links: - db - nginx restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress VIRTUAL_HOST: myblog.mydomain.de nginx: restart: always image: jwilder/nginx-proxy ports: - "80:80"