如何使用 docker-compose 连接到数据库,连接到本地机器上的另一个服务(redash & mysql & python_script )
How to connect to db with docker-compose which connect to another service on local machine (redash & mysql & python_script )
我有数据库,它连接到 python 脚本抛出网络 avito_connect。此脚本更改 MySQL 中的数据。我想用 redash 可视化这些数据。
Docker-使用 mysql_db 编写文件初始化 redash。
但是当我尝试在 mysql 服务中添加网络时 - redash 看不到 mysql db。我不明白为什么。
docker-编写以下代码:
version: '2'
x-redash-service: &redash-service
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
env_file: redash.env
restart: always
services:
server:
<<: *redash-service
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
scheduler:
<<: *redash-service
command: scheduler
environment:
QUEUES: "celery"
WORKERS_COUNT: 1
scheduled_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
adhoc_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "queries"
WORKERS_COUNT: 2
redis:
image: redis:5.0-alpine
restart: always
postgres:
image: postgres:9.5-alpine
env_file: redash.env
restart: always
nginx:
image: redash/nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
mysql:
# container_name: mysql_db
image: mysql:5.7
stdin_open: true # docker run -i
tty: true # docker run -t
volumes:
- /Users/zzema/Documents/Docker/selenium-template/mysql:/var/lib/mysql
- /Users/zzema/Documents/Docker/selenium-template/sql_config_path:/etc/mysql/conf.d
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=todos
- MYSQL_USER=devuser
- MYSQL_PASSWORD=secret
# With this uncomment lines I can't connect to my_sql from redash
# networks:
# avito_connect:
# aliases:
# - mysql
#networks:
# avito_connect:
# external: true
我在 docker-compose
末尾评论了无效的代码行
一个容器要到达另一个容器,它们必须在同一个 Docker 网络上。
Networking in Compose 中描述了您可以使用的整体网络环境。如果您什么都不做,Compose 将为您创建一个名为 default
的网络,容器将附加到该网络。如果您为服务声明 networks:
,它将替换 default
网络,除非您明确声明它。
如果您取消注释这些行,实际上您会得到:
networks:
default: {} # created by Compose
avito_connect: {...} # manually created
services:
server:
networks:
default: {} # automatically inserted
mysql:
networks: # no `default` because there is an explicit setting
avito_connect: {...}
现在这两个服务不在同一个网络上,无法相互连接。
有几种方法可以解决这个问题。一种是将数据库附加到两个网络:
services:
mysql:
networks:
default:
avito_connect:
另一种方法是将“默认”网络设置为您尝试连接的外部网络:
version: '2.4' # minimum 2.1, must be later than 2(.0)
networks:
default:
external: true
name: avito_connect
# and no networks: blocks in any service
我有数据库,它连接到 python 脚本抛出网络 avito_connect。此脚本更改 MySQL 中的数据。我想用 redash 可视化这些数据。 Docker-使用 mysql_db 编写文件初始化 redash。 但是当我尝试在 mysql 服务中添加网络时 - redash 看不到 mysql db。我不明白为什么。 docker-编写以下代码:
version: '2'
x-redash-service: &redash-service
image: redash/redash:8.0.0.b32245
depends_on:
- postgres
- redis
env_file: redash.env
restart: always
services:
server:
<<: *redash-service
command: server
ports:
- "5000:5000"
environment:
REDASH_WEB_WORKERS: 4
scheduler:
<<: *redash-service
command: scheduler
environment:
QUEUES: "celery"
WORKERS_COUNT: 1
scheduled_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
adhoc_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "queries"
WORKERS_COUNT: 2
redis:
image: redis:5.0-alpine
restart: always
postgres:
image: postgres:9.5-alpine
env_file: redash.env
restart: always
nginx:
image: redash/nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
mysql:
# container_name: mysql_db
image: mysql:5.7
stdin_open: true # docker run -i
tty: true # docker run -t
volumes:
- /Users/zzema/Documents/Docker/selenium-template/mysql:/var/lib/mysql
- /Users/zzema/Documents/Docker/selenium-template/sql_config_path:/etc/mysql/conf.d
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=todos
- MYSQL_USER=devuser
- MYSQL_PASSWORD=secret
# With this uncomment lines I can't connect to my_sql from redash
# networks:
# avito_connect:
# aliases:
# - mysql
#networks:
# avito_connect:
# external: true
我在 docker-compose
末尾评论了无效的代码行一个容器要到达另一个容器,它们必须在同一个 Docker 网络上。
Networking in Compose 中描述了您可以使用的整体网络环境。如果您什么都不做,Compose 将为您创建一个名为 default
的网络,容器将附加到该网络。如果您为服务声明 networks:
,它将替换 default
网络,除非您明确声明它。
如果您取消注释这些行,实际上您会得到:
networks:
default: {} # created by Compose
avito_connect: {...} # manually created
services:
server:
networks:
default: {} # automatically inserted
mysql:
networks: # no `default` because there is an explicit setting
avito_connect: {...}
现在这两个服务不在同一个网络上,无法相互连接。
有几种方法可以解决这个问题。一种是将数据库附加到两个网络:
services:
mysql:
networks:
default:
avito_connect:
另一种方法是将“默认”网络设置为您尝试连接的外部网络:
version: '2.4' # minimum 2.1, must be later than 2(.0)
networks:
default:
external: true
name: avito_connect
# and no networks: blocks in any service