在dockerfile中安装mysql?
我想编写简单的python应用程序并将其放入docker文件中。我的dockerfile是:在dockerfile中安装mysql?
FROM ubuntu:saucy
# Install required packages
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb
# Add our python app code to the image
RUN mkdir -p /app
ADD . /app
WORKDIR /app
# Set the default command to execute
CMD ["python", "main.py"]
在我的python应用程序中,我只想连接到数据库。的main.py是这个样子:
import MySQLdb as db
connection = db.connect(
host='localhost',
port=3306,
user='root',
passwd='password',
)
当我建码头工人形象有:
docker build -t myapp .
和运行泊坞窗图像与:
docker run -i myapp
我得到错误:
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
问题是什么?
问题是你从未开始数据库 - 你需要在大多数Docker镜像中明确地启动服务。但是如果你想在Docker(数据库和你的Python程序)中运行两个进程,事情会变得更复杂一些。您必须像使用管理员一样使用流程管理器,或者在启动脚本中稍微聪明些。
要明白我的意思,创建下面的脚本,并调用它cmd.sh
:
#!/bin/bash
mysqld &
python main.py
将它添加到Dockerfile:
FROM ubuntu:saucy
# Install required packages
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb
# Add our python app code to the image
RUN mkdir -p /app
ADD . /app
WORKDIR /app
# Set the default command to execute
COPY cmd.sh /cmd.sh
RUN chmod +x /cmd.sh
CMD cmd.sh
现在建设和重试。 (道歉,如果这不起作用,它是关闭我的头顶,我没有测试过)。
请注意,这是不是很好的解决方案; mysql不会获取代理信号,因此在容器停止时可能无法正常关闭。你可以通过使用像supervisor这样的进程管理器来解决这个问题,但最简单和最好的解决方案是使用单独的容器。您可以找到库存容器mysql以及python,这将为您节省很多麻烦。要做到这一点:
- 采取MySQL安装的东西了你的Python代码Dockerfile
- 变化
localhost
的,无论你想打电话给你的MySQL容器mysql
或。 - 开始喜欢的东西
docker run -d --name mysql mysql
- MySQL的容器启动的容器,并链接到MySQL的容器e.g:
docker run myapp --link mysql:mysql
我得到了同样的错误。如果我把它分成两个容器,应该在第一个容器中应该在什么位置,并且应该在第二个容器中。我必须把它们联系起来吗? – 2015-04-02 20:47:28
添加了一些说明。是的,链接使事情变得更简单。 – 2015-04-02 21:01:22
在python代码中,我将主机更改为'mysqlserver',它是MySQL容器的名称。但我得到这个错误:未知的MySQL服务器主机'mysqlserver'。 – 2015-04-02 22:03:40
错误,数据库没有运行?将数据库放在单独的容器中会更容易,更有意义。 – 2015-04-02 19:30:27
我不明白。如何运行数据库。如果我在主机上安装了mysql,并尝试连接到我的主机上的数据库,它应该能够正常工作。这是否意味着我的主机上的数据库正在运行? – 2015-04-02 19:39:09
您应该只搜索您的错误消息:[1](http://*.com/q/11657829/484666),[2](http://*.com/q/11990708/484666), [3](http://*.com/q/11443504/484666) - 它与Docker或您使用它的方式无关。 – scriptin 2015-04-02 20:12:46