Não é possível iniciar o MySQL a partir de uma imagem do MySQL customizada em um contêiner Docker em um host remoto apenas

2

Eu criei um Dockerfile para construir uma imagem personalizada do MySQL. Usando ele eu posso executar o MySQL no meu laptop localhost Ubuntu 16.04. Mas não no meu dropout DigitalOcean Ubuntu 16.04. Neste sistema remoto, não consigo iniciar o MySQL.

Para fins de depuração, a imagem não está iniciando o MySQL, mas apenas mantendo o contêiner ativo:

FROM ubuntu:16.04

RUN apt-get update \
  && apt-get install -y libncurses-dev \
  && apt-get install -y build-essential \
  && apt-get install -y cmake

COPY mysql-5.6.30.tar.gz /usr/bin/
WORKDIR /usr/bin/
RUN gzip -d mysql-5.6.30.tar.gz \
  && tar -xvf mysql-5.6.30.tar \
  && ln -s mysql-5.6.30 mysql

WORKDIR /usr/bin/mysql/
RUN mkdir install && mkdir install/data && mkdir install/var && mkdir install/etc && mkdir install/tmp

RUN cd /usr/bin/mysql/ \
  && cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/bin/mysql/install \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DMYSQL_DATADIR=/usr/bin/mysql/install/data \
  -DDOWNLOAD_BOOST=1 \
  -DWITH_BOOST=/usr/bin/mysql/install/boost \
  -DMYSQL_UNIX_ADDR=/usr/bin/mysql/install/tmp/mysql.sock \
  && make \
  && make install \
  && make clean

COPY my.cnf install/my.cnf
RUN ln -s /usr/bin/mysql/install/my.cnf ~/.my.cnf

ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"]

No sistema remoto, eu digito os comandos:

cd ~/dev/docker/projects/learnintouch
sudo rm -fr mysql/data/
sudo docker run -d -p 3307:3306 -v /home/stephane/dev/docker/projects/learnintouch/mysql/data:/usr/bin/mysql/install/data --name mysql thalasoft.com:5000/mysql:5.6.30
sudo docker exec -it mysql bash

Então, no container em execução, eu digito o comando:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/scripts/mysql_install_db \
  --no-defaults \
  --explicit_defaults_for_timestamp \
  --basedir=/usr/bin/mysql/install \
  --datadir=/usr/bin/mysql/install/data \
  --tmpdir=/usr/bin/mysql/install/tmp \
  --lc-messages-dir=/usr/bin/mysql/install/share
Installing MySQL system tables...2017-10-25 10:22:26 0 [Note] /usr/bin/mysql/install/bin/mysqld (mysqld 5.6.30) starting as process 28 ...
2017-10-25 10:22:26 28 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-10-25 10:22:26 28 [Note] InnoDB: The InnoDB memory heap is disabled
2017-10-25 10:22:26 28 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-10-25 10:22:26 28 [Note] InnoDB: Memory barrier is not used
2017-10-25 10:22:26 28 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-10-25 10:22:26 28 [Note] InnoDB: Using CPU crc32 instructions
2017-10-25 10:22:26 28 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-10-25 10:22:26 28 [Note] InnoDB: Completed initialization of buffer pool
2017-10-25 10:22:26 28 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2017-10-25 10:22:26 28 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Database physically writes the file full: wait...
2017-10-25 10:22:26 28 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2017-10-25 10:22:26 28 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2017-10-25 10:22:26 28 [Warning] InnoDB: New log files created, LSN=45781
2017-10-25 10:22:26 28 [Note] InnoDB: Doublewrite buffer not found: creating new
2017-10-25 10:22:26 28 [Note] InnoDB: Doublewrite buffer created
2017-10-25 10:22:26 28 [Note] InnoDB: 128 rollback segment(s) are active.
2017-10-25 10:22:26 28 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-10-25 10:22:26 28 [Note] InnoDB: Foreign key constraint system tables created
2017-10-25 10:22:26 28 [Note] InnoDB: Creating tablespace and datafile system tables.
2017-10-25 10:22:26 28 [Note] InnoDB: Tablespace and datafile system tables created.
2017-10-25 10:22:26 28 [Note] InnoDB: Waiting for purge to start
2017-10-25 10:22:26 28 [Note] InnoDB: 5.6.30 started; log sequence number 0
2017-10-25 10:22:26 28 [Note] Binlog end
2017-10-25 10:22:26 28 [Note] InnoDB: FTS optimize thread exiting.
2017-10-25 10:22:26 28 [Note] InnoDB: Starting shutdown...
2017-10-25 10:22:28 28 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK

Filling help tables...2017-10-25 10:22:28 0 [Note] /usr/bin/mysql/install/bin/mysqld (mysqld 5.6.30) starting as process 51 ...
2017-10-25 10:22:28 51 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-10-25 10:22:28 51 [Note] InnoDB: The InnoDB memory heap is disabled
2017-10-25 10:22:28 51 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-10-25 10:22:28 51 [Note] InnoDB: Memory barrier is not used
2017-10-25 10:22:28 51 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-10-25 10:22:28 51 [Note] InnoDB: Using CPU crc32 instructions
2017-10-25 10:22:28 51 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-10-25 10:22:28 51 [Note] InnoDB: Completed initialization of buffer pool
2017-10-25 10:22:28 51 [Note] InnoDB: Highest supported file format is Barracuda.
2017-10-25 10:22:28 51 [Note] InnoDB: 128 rollback segment(s) are active.
2017-10-25 10:22:28 51 [Note] InnoDB: Waiting for purge to start
2017-10-25 10:22:28 51 [Note] InnoDB: 5.6.30 started; log sequence number 1625977
2017-10-25 10:22:28 51 [Note] Binlog end
2017-10-25 10:22:28 51 [Note] InnoDB: FTS optimize thread exiting.
2017-10-25 10:22:28 51 [Note] InnoDB: Starting shutdown...
2017-10-25 10:22:29 51 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  /usr/bin/mysql/install/bin/mysqladmin -u root password 'new-password'
  /usr/bin/mysql/install/bin/mysqladmin -u root -h 4d0028607aeb password 'new-password'

Alternatively you can run:

  /usr/bin/mysql/install/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; /usr/bin/mysql/install/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file /usr/bin/mysql/install/my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as /usr/bin/mysql/install/my-new.cnf,
please compare it with your file and take the changes you need.

Ao iniciar o MySQL, a seguinte saída é exibida:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/bin/mysqld_safe --defaults-file=/usr/bin/mysql/install/my.cnf
171025 10:37:32 mysqld_safe Logging to '/usr/bin/mysql/install/mysql.error.log'.
171025 10:37:32 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
171025 10:37:32 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

root@4d0028607aeb:/usr/bin/mysql-5.6.30# /usr/bin/mysql/install/bin/mysqld_safe  
171025 10:23:33 mysqld_safe Logging to '/usr/bin/mysql/install/mysql.error.log'.
171025 10:23:33 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
171025 10:23:34 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

E o log não está dizendo muito:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cat /usr/bin/mysql/install/mysql.error.log
171025 10:23:33 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
Killed
171025 10:23:34 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended
171025 10:37:32 mysqld_safe Starting mysqld daemon with databases from /usr/bin/mysql/install/data
Killed
171025 10:37:32 mysqld_safe mysqld from pid file /usr/bin/mysql/install/data/4d0028607aeb.pid ended

O arquivo my.cnf contém:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cat /usr/bin/mysql/install/my.cnf 
[mysqld]
bind-address    = 0.0.0.0 # Allow client binding from any IP address instead of just 127.0.0.1
port            = 3306
sql_mode        = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # This is strict mode: NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
socket          = /usr/bin/mysql/install/tmp/mysql.sock
user            = root
basedir         = /usr/bin/mysql/install
datadir         = /usr/bin/mysql/install/data
log-bin         = /usr/bin/mysql/install/mysql.bin.log
log-error       = /usr/bin/mysql/install/mysql.error.log
general-log-file     = /usr/bin/mysql/install/mysql.log
slow-query-log-file  = /usr/bin/mysql/install/mysql.slow.queries.log
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
innodb_flush_method = O_DIRECT
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
character-set-client-handshake = FALSE
wait_timeout = 28800 # amount of seconds during inactivity that MySQL will wait before it will close a connection on a non-interactive connection
interactive_timeout = 28800 # same, but for interactive sessions
[client]
socket = /usr/bin/mysql/install/tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

Existe um link para ele:

root@4d0028607aeb:/usr/bin/mysql-5.6.30# cd
root@4d0028607aeb:~# ll
total 16
drwx------  2 root root 4096 Oct 25 08:06 ./
drwxr-xr-x 50 root root 4096 Oct 25 10:21 ../
-rw-r--r--  1 root root 3106 Oct 22  2015 .bashrc
lrwxrwxrwx  1 root root   29 Oct 25 08:06 .my.cnf -> /usr/bin/mysql/install/my.cnf
-rw-r--r--  1 root root  148 Aug 17  2015 .profile

Para que ele possa ser encontrado:

root@4d0028607aeb:~# /usr/bin/mysql/install/bin/mysqladmin | grep my.cnf                                 
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/bin/mysql/install/etc/my.cnf ~/.my.cnf 

Os diretórios do host acessados de dentro do contêiner:

stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll
total 24K
drwxr-xr-x 8 stephane 4.0K Oct 24 16:52 engine/
drwxrwxr-x 2 stephane 4.0K Oct 24 16:22 learnintouch/
drwxrwxr-x 2 stephane 4.0K Oct 24 16:22 learnintouch.com/
drwxrwxr-x 2 stephane 4.0K Oct 24 13:11 learnintouch.com-startup/
drwxrwxrwx 3 stephane 4.0K Oct 25 10:20 mysql/
drwxr-xr-x 3 root     4.0K Oct 24 16:36 website/
stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll mysql/
total 4.0K
drwxr-xr-x 5 root 4.0K Oct 25 10:22 data/
stephane@ubuntu-512mb-fra1-01:~/dev/docker/projects/learnintouch$ ll mysql/data/
total 109M
-rw-rw---- 1 root  12M Oct 25 10:22 ibdata1
-rw-rw---- 1 root  48M Oct 25 10:22 ib_logfile0
-rw-rw---- 1 root  48M Oct 25 10:22 ib_logfile1
drwx------ 2 root 4.0K Oct 25 10:22 mysql/
drwx------ 2 root 4.0K Oct 25 10:22 performance_schema/
drwx------ 2 root 4.0K Oct 25 10:22 test/
-rw-r--r-- 1 root    0 Oct 25 10:21 created-from-within-the-container

Eu também adicionei um arquivo de swap de 2G e tentei novamente, mas ele ainda não começou da mesma maneira.

    
por Stephane 25.10.2017 / 13:35

0 respostas

Tags