首页 > 解决方案 > Docker - 将新的 Wordpress 容器添加到现有的 SQL 数据库容器

问题描述

我正在尝试了解或查找有关如何将新的 Wordpress 容器连接到现有的 MariaDB 容器的信息。我错过了一些东西。我可以在创建 MariaDB 容器的同时添加一个 Wordpress 实例。见下文。


services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8282:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - ./:/var/www/html
    links:
      - db:db

  db:
    image: mariadb:latest
    restart: always
    container_name: mariadb
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db:/var/lib/mysql
  
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    restart: always
    container_name: phpmyadmin
    ports:
      - "8081:80"
    environment: 
      PMA_HOST: mariadb
    

volumes:
  wordpress:
  db:
  phpmyadmin:```

After that has spun up and is good to go, I then attempt another docker-compose.yml (see below) and I cannot get the Wordpress instance to connect to the SQL instance.

```version: '3.7'

services:

  wordpress:
    image: wordpress
    restart: always
    container_name: wordup
    ports:
      - 8283:80
    environment:
      WORDPRESS_DB_HOST: 172.20.0.3
      WORDPRESS_DB_USER: username
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wp2
    volumes:
      - ./:/var/www/html
    
volumes:
  wp2:

我如何将新的 WP 实例指向我在 MariaDB 容器上创建的数据库?是否可以在不重新创建新数据库的情况下将新的 Docker Compose 堆栈指向已创建的数据库?我知道在不同的应用程序之间共享数据库不是一个好主意,但是我需要将数据从一个 Wordpress 站点提取到另一个站点。

谢谢!

标签: dockerdocker-compose

解决方案


您可以使用 Docker 网络。您需要将两个 docker-compose 文件连接到同一个网络,并且在该网络内的容器可以通过容器名称相互引用。

以下是文档中有关 docker-compose 网络的更多信息:https ://docs.docker.com/compose/networking/#specify-custom-networks

看一个例子,两个 Nginx 代理开始使用不同的 docker-compose 文件。第一个代理重定向到第二个代理,然后将我们重定向到google.com.

第一个代理docker-compose.yml

version: "3.9"
services:
    first:
        build: .
        ports:
            - "8081:80"
        networks:
            - "test-network"
networks:
    test-network:
        name: "test-network"
        driver: "bridge"

第一个代理ngnix.conf

events {}

http {
    server {
        location / {
            proxy_pass http://second:80; # in second docker-compose file we're setting container_name to "second", thus we can reference second container by this name
        }
    }
}

第二个代理docker-compose.yml

version: "3.9"
services:
    second:
        container_name: "second" # note, that we don't need to expose ports because we don't need to make this service visible to a host. But it's not restricted to expose ports. You can do so if you need.
        build: .
        networks:
            - "test-network"
networks:
    test-network:
        name: "test-network"
        driver: "bridge"

第二个代理ngnix.conf

events {}

http {
    server {
        location / {
            proxy_pass https://google.com;
        }
    }
}

推荐阅读