MariaDB永远不会在docker镜像中启动

时间:2016-12-20 15:40:04

标签: mysql docker mariadb

我正在使用ubuntu trusty和MariaDB 5.5创建一个docker镜像,但除非我实际连接到正在运行的VM,否则我永远无法启动MariaDB。

Dockerfile:

FROM ubuntu:trusty

# Upgrade packages
RUN apt-get update && apt-get upgrade -y

# So we can add a repo to apt
RUN apt-get install -y software-properties-common

# Add MariaDB repo to aptitude
RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
RUN add-apt-repository 'deb http://mirror.jmu.edu/pub/mariadb/repo/5.5/ubuntu trusty main'
RUN apt-get update

# Install MariaDB
RUN DEBIAN_FRONTEND=noninteractive debconf-set-selections << 'mariadb-server-5.5 mysql-server/root_password password PASS'
RUN DEBIAN_FRONTEND=noninteractive debconf-set-selections << 'mariadb-server-5.5 mysql-server/root_password_again password PASS'
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mariadb-server

# Start MariaDB
RUN service mysql start

# Configure MariaDB User permissions
RUN echo "CREATE USER 'ubuntu'@'localhost'" | mysql -u root

我正在运行的命令:

docker build -t ebth-com-trusty --file `pwd`/Dockerfile `pwd` --no-cache

由于以下原因,create命令将始终失败:

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

但是,如果我注释掉CREATE USER命令,然后连接到VM,我可以在运行手册service mysql start后很好地连接到MariaDB。

好像RUN service mysql start只是不起作用,我不知道如何进一步调试它。

1 个答案:

答案 0 :(得分:3)

Dockerfile中的每个命令都在其自己的容器中运行。

你可以想到这样的过程:

  1. 使用上一张图片
  2. 旋转新容器
  3. 执行命令
  4. 容器被旋转
  5. 获取该容器的图像,以便在
  6. 上运行下一个命令

    这意味着命令RUN service mysql start将启动一个新容器,启动MariaDB,然后关闭容器,包括关闭MariaDB。

    而是尝试使用CMD和ENTRYPOINT。您可以将它们视为设置一旦容器旋转后执行的默认可执行文件,命令和参数。然而,两者之间的差异有点神圣。查看文档:{​​{3}}和CMD

    它看起来像这样:

    # Create default user
    RUN service mysql start && \
        echo "CREATE USER 'ubuntu'@'localhost'" | mysql -u root
    
    # Start MariaDB
    ENTRYPOINT ["/bin/bash"]
    CMD ["service", "mysql", "start"]