通过卷和 pymysql 连接 MYSQL 容器和 Python 容器
Connecting MYSQL container with Python container through volume and pymysql
我需要将一个 MYSQL 容器连接到一个 Python 容器,这样我就可以从这个 python 容器上的 MYSQL 获取数据库。我现在正在为此使用 pymysql。
我用 docker-compose 制作了容器,我将 link 文件放在这里。
dockerfile.yml mysql 'my-mysql' 是mij自定义 mysql 图片
version: "3.3"
services:
app-name:
build:
context: .
image: my-mysql
container_name: my-mysql
ports:
- '3308:3308'
environment:
MYSQL_ROOT_PASSWORD: 'root-password'
MYSQL_DATABASE: 'bags'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
restart: unless-stopped
expose:
- '3308'
volumes:
data:
external:
name: data
这是 python 的 dockerfile.yml
'dataoverdracht' 是我的自定义 python 图片
version: "3.7"
services:
app-name:
build:
context: .
image: dataoverdracht:1.0.0
container_name: dataoverdracht
ports:
- 92:8080
environment:
- TARGET=$TARGET
restart: unless-stopped
volumes:
- .:/data
volumes:
data:
external:
name: data
这是我为容器连接 mysql 所做的 python 代码。
import dash_html_components as html
import pymysql
import pandas as pd
connection = pymysql.connect("172.17.0.2","user","password","bags" )
cur = connection.cursor()
cur.execute("select * from filledbags LIMIT 10")
rows = cur.fetchall()
df = pd.DataFrame(rows)
print(df)
我有 docker 文件和 requirements.txt 之类的文件,但我可以向你保证,它们没有任何问题,唯一方便的是来自 docker 的公开文件文件 python 这是 EXSPOSE 8080。
当我尝试连接它们时,我会收到错误消息
pymysql.err.OperationalError: (1045, "Access denied for user 'user'@'172.18.0.2' (using password: YES)")
有人可以向我解释一下我的代码有什么问题吗?顺便说一句:我确实在这个网站上检查了不同的问题我读了一些关于改变我的 my.cnf 我试图寻找我的绑定地址但是它没有包含在我的这个文件中所以这似乎不是解决方案。
例如您需要创建网络my_network
$ docker network create --driver=bridge my_network
然后在docker-compose 文件中使用它。
first_file.yml
version: "3.3"
services:
app-name:
build:
context: .
image: my-mysql
container_name: my-mysql
ports:
- "3308:3308"
environment:
MYSQL_ROOT_PASSWORD: "root-password"
MYSQL_DATABASE: "bags"
MYSQL_USER: "user"
MYSQL_PASSWORD: "password"
restart: unless-stopped
expose:
- "3308"
networks:
- my_network
networks:
my_network:
external: true
volumes:
data:
external:
name: data
second_file.yml
version: "3.7"
services:
app-name:
build:
context: .
image: dataoverdracht:1.0.0
container_name: dataoverdracht
ports:
- 92:8080
environment:
- TARGET=$TARGET
restart: unless-stopped
volumes:
- .:/data
networks:
- my_network
networks:
my_network:
external: true
volumes:
data:
external:
name: data
然后更新您的 python 代码(使用 my_network
而不是 172.17.0.2
)。
import dash_html_components as html
import pymysql
import pandas as pd
connection = pymysql.connect("my_network","user","password","bags" )
cur = connection.cursor()
cur.execute("select * from filledbags LIMIT 10")
rows = cur.fetchall()
df = pd.DataFrame(rows)
print(df)
我需要将一个 MYSQL 容器连接到一个 Python 容器,这样我就可以从这个 python 容器上的 MYSQL 获取数据库。我现在正在为此使用 pymysql。
我用 docker-compose 制作了容器,我将 link 文件放在这里。 dockerfile.yml mysql 'my-mysql' 是mij自定义 mysql 图片
version: "3.3"
services:
app-name:
build:
context: .
image: my-mysql
container_name: my-mysql
ports:
- '3308:3308'
environment:
MYSQL_ROOT_PASSWORD: 'root-password'
MYSQL_DATABASE: 'bags'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'password'
restart: unless-stopped
expose:
- '3308'
volumes:
data:
external:
name: data
这是 python 的 dockerfile.yml
'dataoverdracht' 是我的自定义 python 图片
version: "3.7"
services:
app-name:
build:
context: .
image: dataoverdracht:1.0.0
container_name: dataoverdracht
ports:
- 92:8080
environment:
- TARGET=$TARGET
restart: unless-stopped
volumes:
- .:/data
volumes:
data:
external:
name: data
这是我为容器连接 mysql 所做的 python 代码。
import dash_html_components as html
import pymysql
import pandas as pd
connection = pymysql.connect("172.17.0.2","user","password","bags" )
cur = connection.cursor()
cur.execute("select * from filledbags LIMIT 10")
rows = cur.fetchall()
df = pd.DataFrame(rows)
print(df)
我有 docker 文件和 requirements.txt 之类的文件,但我可以向你保证,它们没有任何问题,唯一方便的是来自 docker 的公开文件文件 python 这是 EXSPOSE 8080。
当我尝试连接它们时,我会收到错误消息
pymysql.err.OperationalError: (1045, "Access denied for user 'user'@'172.18.0.2' (using password: YES)")
有人可以向我解释一下我的代码有什么问题吗?顺便说一句:我确实在这个网站上检查了不同的问题我读了一些关于改变我的 my.cnf 我试图寻找我的绑定地址但是它没有包含在我的这个文件中所以这似乎不是解决方案。
例如您需要创建网络my_network
$ docker network create --driver=bridge my_network
然后在docker-compose 文件中使用它。
first_file.yml
version: "3.3"
services:
app-name:
build:
context: .
image: my-mysql
container_name: my-mysql
ports:
- "3308:3308"
environment:
MYSQL_ROOT_PASSWORD: "root-password"
MYSQL_DATABASE: "bags"
MYSQL_USER: "user"
MYSQL_PASSWORD: "password"
restart: unless-stopped
expose:
- "3308"
networks:
- my_network
networks:
my_network:
external: true
volumes:
data:
external:
name: data
second_file.yml
version: "3.7"
services:
app-name:
build:
context: .
image: dataoverdracht:1.0.0
container_name: dataoverdracht
ports:
- 92:8080
environment:
- TARGET=$TARGET
restart: unless-stopped
volumes:
- .:/data
networks:
- my_network
networks:
my_network:
external: true
volumes:
data:
external:
name: data
然后更新您的 python 代码(使用 my_network
而不是 172.17.0.2
)。
import dash_html_components as html
import pymysql
import pandas as pd
connection = pymysql.connect("my_network","user","password","bags" )
cur = connection.cursor()
cur.execute("select * from filledbags LIMIT 10")
rows = cur.fetchall()
df = pd.DataFrame(rows)
print(df)