2017-11-16 4 views
1

Kann jemand mysql-server über dockerfile installieren? Ich habe eine Dockerfile geschrieben, aber die Build endet mit einem Fehler: /bin/sh: 1:/usr/bin/mysqld: nicht gefundenWie installiere ich mysql-server über dockerfile

USER root 

RUN apt-get update 
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server-5.7 

# Remove pre-installed database 
RUN rm -rf /var/lib/mysql/* 

RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/"/etc/mysql/my.cnf 

ENV DB_USER example 
ENV DB_PASSWORD example 
ENV DB_NAME example 
ENV VOLUME_HOME "/var/lib/mysql" 

EXPOSE 3306 

RUN cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf 
RUN /usr/bin/mysqld && sleep 5 && \ 
    mysql -uroot -e "CREATE USER '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}'" && \ 
    mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO '${DB_USER}'@'%' WITH GRANT OPTION" &&\ 
    mysql -uroot -e "CREATE DATABASE ${DB_NAME}" && \ 
    mysqladmin -uroot shutdown 
+0

Welches Basisbild verwenden Sie? –

+1

VON ubuntu: 16.04 – adbo

+0

Warum nicht das offizielle Bild verwenden oder ihre Dockerfile als Basis verwenden? –

Antwort

1

Für eine ubuntu: 16.04 Basisbild, mysqld gefunden in /usr/sbin, nicht /usr/bin

Wenn Sie einen Schritt RUN which mysqld bevor Sie Ihre endgültige RUN-Befehl hinzufügen können, die Ihnen zeigen, wo die mysqld ausführbare gefunden wird. Dies hängt davon ab, welches Basisbild/welche Basis Sie verwenden.

Sie können auch RUN mysqld ... ohne einen vollständigen Pfad verwenden, wenn die Datei in Ihrem $PATH

Unter Umständen müssen Sie auch unter Ihrer RUN sed Linie aktualisieren, das Hinzufügen Leerzeichen um die Zeichenfolge in Anführungszeichen:

RUN sed -i -e "s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 

Andernfalls wird möglicherweise der folgende Fehler angezeigt:

The command '/bin/sh -c sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/"/etc/mysql/my.cnf' returned a non-zero code: 1 
+1

Sie haben Recht mysqld ist in usr/sbin gefunden. Aber jetzt bekomme ich einen Nicht-Null-Code: 1. Kannst du in meinem "Script" etwas falsch sehen? – adbo

+0

@adbo Ja, Sie müssen auch Ihre 'RUN sed' Zeile bearbeiten, glaube ich. Wird meine Antwort aktualisieren, um den sed Fehler zu notieren –

+1

Diese Zeile ist ohne Fehler erfolgreich - ich bekomme den Code ungleich Null in: RUN/usr/bin/mysqld && sleep 5 && \ mysql -uroot -e "BENUTZER ERSTELLEN '$ {DB_USER}' @ '%' IDENTIFIED VON '$ {DB_PASSWORD}' "&& \ mysql -uroot -e" ALLE PRIVILEGES AUF *. * ZU '$ {DB_USER}' @ '%' WITH GRANT OPTION " && \ mysql -uroot -e "CREATE DATENBANK $ {DB_NAME}" && \ mysqladmin -uroot shutdown – adbo