V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
final0pro
V2EX  ›  程序员

mysql 的 docker container

  •  
  •   final0pro · 2014-07-28 13:46:12 +08:00 · 6359 次点击
    这是一个创建于 3553 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚接触docker和mysql,想建立一个docker container,里面装个mysql。程序可以直接连接ontainer里的mysql。

    这是Dockerfile
    FROM ubuntu:14.04
    # install mysql
    RUN apt-get update
    RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server
    ADD entrypoint.sh /entrypoint.sh
    RUN chmod 755 /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    EXPOSE 3306

    这是`entrypoint.sh`

    #!/bin/bash
    mysql -uroot -e 'UPDATE mysql.user SET password=PASSWORD("rootpass") WHERE user="root"'
    mysql -uroot -e 'FLUSH PRIVILEGES'

    安装的时候好像出了问题,运行`sudo docker build -t test/devenv .`
    Setting up mysql-server-5.5 (5.5.38-0ubuntu0.14.04.1) ...
    invoke-rc.d: policy-rc.d denied execution of stop.
    invoke-rc.d: policy-rc.d denied execution of start.

    执行`sudo docker run -d -p 3306:3306 test/devenv`

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    2c0bfb09a8a0 test/devenv:latest /entrypoint.sh /bin/ 7 seconds ago Exited (1) 6 seconds ago berserk_nobel

    执行`sudo docker run -i -t ubuntu /bin/bash`

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    大神们我这是要怎么修改?谢谢!


    http://stackoverflow.com/questions/24988947/install-mysql-in-docker-and-expose-mysql-service-to-outside
    第 1 条附言  ·  2014-07-29 11:33:48 +08:00
    更改了文件

    Dockerfile:

    FROM ubuntu:14.04
    ADD ./setup_mysql.sh /setup_mysql.sh
    RUN chmod 755 /setup_mysql.sh
    RUN /setup_mysql.sh
    EXPOSE 3306
    CMD ["/usr/sbin/mysqld"]

    setup_mysql.sh
    apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
    sed -i -e "s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf

    service mysql start &
    sleep 5

    echo "UPDATE mysql.user SET password=PASSWORD('rootpass') WHERE user='root'" | mysql
    echo "CREATE DATABASE devdb" | mysql
    echo "GRANT ALL ON devdb.* TO devuser @'%' IDENTIFIED BY 'devpass'" | mysql

    sleep 5
    service mysql stop

    新的Dockerfile还是会在安装mysql-server时候无法正常启动mysql
    不过可以从外部通过devuser连接到了

    新的问题来了:
    第二个 sleep 5 不移除的话, service mysql stop就会爆出
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    16 条回复    2014-07-30 10:58:13 +08:00
    msg7086
        1
    msg7086  
       2014-07-28 16:11:28 +08:00   ❤️ 1
    看上去没什么问题。你能连接mysql端口试试吗?
    jamesxu
        2
    jamesxu  
       2014-07-28 17:16:21 +08:00   ❤️ 1
    jamesxu
        3
    jamesxu  
       2014-07-28 17:18:52 +08:00
    jamesxu
        4
    jamesxu  
       2014-07-28 17:19:34 +08:00
    额,贴的好难看
    final0pro
        5
    final0pro  
    OP
       2014-07-28 22:57:54 +08:00
    @msg7086 container 已经终止了
    final0pro
        6
    final0pro  
    OP
       2014-07-28 22:58:20 +08:00
    @jamesxu 好多疑问lol。我先看看
    xdays
        7
    xdays  
       2014-07-29 13:13:18 +08:00   ❤️ 1
    final0pro
        8
    final0pro  
    OP
       2014-07-30 08:08:37 +08:00
    @xdays 对啊。感觉和你的差不多。但是为什么我的mysql安装之后不能正常启动与关闭呢。而且我一定要chmod那个script。。为啥呢T_T
    imlonghao
        9
    imlonghao  
       2014-07-30 10:18:58 +08:00 via iPad
    我昨晚搭建了一个myswl容器,没用dockerfile,bash进去安装的。
    安装步骤没看网上乱七八糟的教程,看mysql.org上面的东西安装的。
    安装后,我commit成一个images,然后run base/mysql /bin/sbin/mysqld_safe
    接下来的事情就是mysql容器和web容器之间link的事情了
    imlonghao
        10
    imlonghao  
       2014-07-30 10:19:16 +08:00 via iPad
    mysql*
    imlonghao
        11
    imlonghao  
       2014-07-30 10:20:02 +08:00 via iPad   ❤️ 1
    /usr/sbin/mysqld_safe*
    final0pro
        12
    final0pro  
    OP
       2014-07-30 10:26:09 +08:00
    @imlonghao 我现在能跑起来。。。只是不懂为什么
    1. 安装mysql之后无法正常启动
    2. service mysql stop之前要sleep一下
    imlonghao
        13
    imlonghao  
       2014-07-30 10:34:19 +08:00 via iPad
    下面说的话我是猜的...
    1/无法正常启动是run的时候么?docker logs ID,应该可以看到/usr/sbin/mysqld_safe启动日志的。
    2/留点时间给上面的语句执行么?不确定
    final0pro
        14
    final0pro  
    OP
       2014-07-30 10:43:49 +08:00
    @imlonghao

    1. 我的理解是apt-get install mysql的时候,会启动mysql服务
    但是在apt-get install的时候报错了-> denied start & stop

    是因为container的原因嘛?!。。。
    imlonghao
        15
    imlonghao  
       2014-07-30 10:46:17 +08:00 via iPhone
    原生ubuntu:14.04貌似直接apt安装mysql-server会出现问题
    你先看mysql.org 里面有个deb 先安装这个deb 再apt安装就好了
    final0pro
        16
    final0pro  
    OP
       2014-07-30 10:58:13 +08:00
    @imlonghao 我已经试过了lol,直接在14.04里面运行那个sh一点问题都没有。。。没有报错,也不需要使用sleep 5。 不过我去看看那个deb。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2582 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:31 · PVG 09:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.