如何解决如何使用docker-compose连接到数据库,该docker-compose连接到本地计算机上的另一服务redash&mysql&python_script
我有数据库,该数据库连接到python脚本并抛出网络avito_connect。该脚本在MySQL中更改数据。我想用redash可视化此数据。 Docker-compose文件使用mysql_db初始化redash。 但是,当我尝试在mysql服务中添加网络时-redash看不到mysql db。我不明白为什么。 docker-compose代码如下:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。