如何动态地将mysql容器的IP地址传递给另一个容器作为输入?

时间:2020-02-26 09:11:17

标签: docker-container mysql-connector-python

我仍然对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容器。 有什么解决办法吗?谢谢。

0 个答案:

没有答案
相关问题