我仍然对Docker还是陌生的,我要根据它获得一个任务。 我有一个mysql容器,该容器具有在后端运行的自创建表。然后,我基于Python脚本构建另一个图像。这个想法是,每次我运行一个Python映像的容器时,它都会连接mysql容器并将一些条目添加到数据库中。 由于连接mysql数据库需要IP地址,因此我需要一种解决方案来动态获取mysql容器的IP地址并将其作为输入传递给pythen容器。目前,我只是通过硬编码来进行测试。 我通过docker-compose创建mysql容器:
version: '3'
services:
mysql:
container_name: mysqlDemoStorage
environment:
MYSQL_ROOT_PASSWORD: "demo"
command:
--character-set-server=utf8
ports:
- 3306:3306
image: "docker.io/mysql:latest"
restart: always
volumes:
- "./db:/var/lib/mysql"
- "./init:/docker-entrypoint-initdb.d/"
初始化文件运行不正常,但当前不是优先级。 应该使用Python脚本创建一个表(如果不存在)并保存一些PDF文件的路径和文件名,如下所示:
import os
import glob
import mysql.connector as sqlcon
# get list of pdf files in the folder in the format of abslout path
parentDir = os.path.dirname(os.getcwd())
sourceFolderName = "pdf"
sourceFolder = os.path.join(parentDir, sourceFolderName)
pdflist = glob.glob(os.path.join(sourceFolder, "*.pdf"))
# create a connection session to mysql
try:
dbsession = sqlcon.connect(
host="172.19.0.2", port=3306, user="root", password="demo")
cur = dbsession.cursor()
except sqlcon.Error as err:
print("Somethin went wrong: {}".format(err))
try:
cur.execute("CREATE DATABASE IF NOT EXISTS storage")
cur.execute("use storage")
except sqlcon.Error as err:
print("Somethin went wrong: {}".format(err))
createSQL = "CREATE TABLE IF NOT EXISTS pdfs ( ID INT NOT NULL AUTO_INCREMENT, Filename LONGTEXT NOT NULL,Filepath LONGTEXT NOT NULL,File MEDIUMBLOB,PRIMARY KEY (id))"
try:
cur.execute(createSQL)
except sqlcon.Error as err:
print("Locate table error: {}".format(err))
for pdf in pdflist:
pdfread = open(pdf, "rb").read()
insertSQL = "INSERT INTO pdfs(Filename,Filepath,file) VALUES(%s,%s,%s)"
try:
cur.execute(insertSQL, (os.path.basename(pdf), pdf, pdfread))
except sqlcon.Error as err:
print("Insert data error: {}".format(err))
cur.close()
dbsession.commit()
dbsession.close()
如您所见,连接中的参数“主机”使用IP地址进行硬编码。我想要一个动态的,它来自正在运行的mysql容器。 有什么解决办法吗?谢谢。