如何使用 docker-compose.yml 为 docker 中的应用程序 运行 指定 docker 容器数据库?

How to specify a docker container database to a app running in docker with docker-compose.yml?

上下文

有这个docker-compose.yml:

version: '3'
services:
  mediawiki:
    image: mediawiki
    restart: always
    ports:
      - 8080:80
    links:
      - database
    volumes:
      - /var/www/html/images
      # After initial setup, download LocalSettings.php to the same directory as
      # this yaml and uncomment the following line and use compose to restart
      # the mediawiki service
      # - ./LocalSettings.php:/var/www/html/LocalSettings.php
  database:
    image: mariadb
    restart: always
    environment:
      # @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php
      MYSQL_DATABASE: my_wiki
      MYSQL_USER: wikiuser
      MYSQL_PASSWORD: example
      MYSQL_RANDOM_ROOT_PASSWORD: yes

当我 运行 docker ps 我得到:

89db8794029a  mysql:latest "docker-entrypoint..."  ...  0.0.0.0:8083->3306/tcp   some-mysql

这是一个 mysql docker 容器 运行ning.

问题

如何修改 docker-compose.yml 使数据库指向 mysql docker 容器 (89db8794029a) 已经 运行ning?

您不必在 yml 文件中添加数据库服务。

为了使 mediawiki 服务连接到 some-mysql 容器,mediawiki 容器需要与 some-mysql 容器

在同一网络上

假设 mediawiki 已经启动

首先,你需要知道一些-mysql使用什么网络,

docker network ls

我猜会是 'some-mysql_default'

将媒体维基连接到一些-mysql

docker network connect some-mysql_default mediawiki

现在,在 mediawiki 配置中使用 'some-mysql' 作为主机名数据库

yml 文件自动连接到mysql网络

version: '3'
services:
  mediawiki:
    image: mediawiki
    restart: always
    ports:
      - 8080:80
    links:
      - database
    volumes:
      - /var/www/html/images
      # After initial setup, download LocalSettings.php to the same directory as
      # this yaml and uncomment the following line and use compose to restart
      # the mediawiki service
      # - ./LocalSettings.php:/var/www/html/LocalSettings.php
    networks:
      - default
      - some-mysql_default
networks:
  default: # this network
    driver: bridge
  some-mysql_default: # external network
    external: true