Docker Compose:带有外部容器的Depends_On?

时间:2019-12-14 20:33:05

标签: mysql docker docker-compose containers

我正在尝试为名为“ mysql”的外部 MySQL容器添加depends_on(我不想为此堆栈创建新的mysql容器;我想使用现有容器)。

到目前为止,我的代码如下:

version: '2'

services:
  wordpress:
    image: wordpress:latest
    hostname: mia
    restart: unless-stopped
    ports:
      - 80
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: "mia"
      WORDPRESS_DB_PASSWORD: "12345"
      WORDPRESS_DB_NAME: "mia"
    volumes:
      - /f/Sites/mia:/var/www/html
    depends_on:
      - mysql
    networks:
      - occms
      - ocdb

  mysql:
      name: mysql

networks:
  occms:
    external:
      name: cms
  ocdb:
    external:
      name: db

似乎找不到任何好的信息吗?

2 个答案:

答案 0 :(得分:2)

depends_on 指令仅适用于同一组合项目中的服务。如果将这些文件合并到同一个项目中,它们可能位于不同的文件中,例如

docker-compose -f compose-app.yaml -f compose-db.yaml up

否则,我建议将启动依赖项从 compose 移到应用程序的入口点中。一个常见的例子是 wait-for-it.sh,它允许你有一个入口点脚本:

#!/bin/sh
# delay for mysql startup using wait-for-it for up to 5 minutes
wait-for-it.sh -h mysql -p 3306 -t 300
# call the original wordpress entrypoint script with any args
exec docker-entrypoint.sh "$@"

答案 1 :(得分:0)

听起来您想通过另一个 Compose 堆栈来管理 MySQL 容器。

所以选项一:检查外部链接是否适合您: Docker-compose external_links not able to connect

另一种选择是通过主机网络堆栈连接它:

在当前堆栈中,你需要改变这部分

WORDPRESS_DB_HOST: mysql:3306

作为概念证明,将 mysql 替换为 MySQL 容器的 IP 地址并删除所有depends_on。

另一方面,您应该确保在启动 MySQL 容器时,容器端口链接到主机端口。所以两者通过主机堆栈进行通信。 此外,主机名 mysql 可以配置为第二步。