2016-12-20 2 views
2

Я создаю изображение докера с помощью ubuntu trusty и MariaDB 5.5, но я никогда не могу запустить MariaDB, если я действительно не подключился к работающей виртуальной машине.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 

команду Создать всегда будет терпеть неудачу из-за:

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

Но если я закомментировать команду CREATE USER, а затем подключиться к виртуальной машине, я могу подключиться к MariaDB просто отлично после запуска руководства service mysql start.

Как будто RUN service mysql start просто не работает, и я не уверен, как отлаживать это дальше.

+0

Не 'RUN службы MySQL start', может быть CMD или Entrypoint вместо – user2915097

+0

Если вы не зададите команду, построить изображение и запустите его, вы можете войти в контейнер для запуска и проверить файл сокета на /var/run/mysqld/mysqld.sock – Ray

ответ

3

Каждая команда в файле Dockerfile запускается в собственном контейнере.

Вы можете думать о процессе, как:

  1. новый контейнер формуют с использованием предыдущего изображения
  2. команда выполняется
  3. контейнер откручивают
  4. образ этого контейнера принимается за следующую команду для запуска на

Это означает, что команда RUN service mysql start будет разверните новый контейнер, запустите MariaDB, затем выключите контейнер, включая закрытие MariaDB.

Вместо этого попробуйте использовать CMD и ENTRYPOINT. Вы можете думать о них как о настройке исполняемого файла по умолчанию, команде и параметрах, выполняемых после того, как контейнер развернут. Тем не менее, разница между ними немного более неочевидна. Проверьте документацию: CMD и ENTRYPOINT

Это будет выглядеть примерно так:

# Create default user 
RUN service mysql start && \ 
    echo "CREATE USER 'ubuntu'@'localhost'" | mysql -u root 

# Start MariaDB 
ENTRYPOINT ["/bin/bash"] 
CMD ["service", "mysql", "start"] 
+0

@geesu сделал это для вас? – IanEdington

+1

Да, спасибо огромное @IanEdington! – Geesu

Смежные вопросы