Docker Compose:Depends_On 与外部容器?

J. *_*ein 6 mysql containers docker docker-compose

我正在尝试添加名为“mysql”depends_on外部MySQL 容器(我不想为此堆栈创建新的 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
Run Code Online (Sandbox Code Playgroud)

有人知道解决方案吗?

BMi*_*tch 11

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

docker-compose -f compose-app.yaml -f compose-db.yaml up
Run Code Online (Sandbox Code Playgroud)

否则,我建议将启动依赖项从组合中移出并移至应用程序的入口点中。常见的示例是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 "$@"
Run Code Online (Sandbox Code Playgroud)


aho*_*ich 0

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

所以选项一:检查外部链接是否适合您: Docker-compose external_links 无法连接

另一种选择是通过主机网络堆栈将其全部连接:

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

WORDPRESS_DB_HOST: mysql:3306
Run Code Online (Sandbox Code Playgroud)

作为概念证明,替换mysql为 MySQL 容器的 IP 地址并删除任何 dependent_on。

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