create tables on docker start

Sch*_*cke 3 mysql sql docker

I am new to docker, i have created my application and i want to send to another developer but i cant seem to run it running docker.

It says tables dont exist. I have read the docker doc but i dont get it.

The table are not created.

WHAT AM I DOING WRONG?

my dockerfile

FROM php:7.1-apache

RUN docker-php-ext-install pdo pdo_mysql

COPY ./dump.sql /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)

my docker-composer

version: '2'

volumes:
    logs:
        driver: local

services:
    slim:
        build: .
        working_dir: /var/www
        command: php -S 0.0.0.0:8080 -t public
        environment:
            docker: "true"
        depends_on:
          - db-mysql
        ports:
            - 80:8080
        volumes:
            - .:/var/www
            - logs:/var/www/logs
        links:
          - db-mysql

    db-mysql:
      image: mysql
      restart: always
      container_name: db-mysql
      ports:
        - "3307:3306"
      environment:
        MYSQL_DATABASE: path
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: root
        MYSQL_PASSWORD: root
      volumes:
        - ./mysql_init:/docker-entrypoint-initdb.d
        - ./dump.sql:/docker-entrypoint-initdb.d
Run Code Online (Sandbox Code Playgroud)

and my dump.sql has

CREATE TABLE IF NOT EXIST `paths` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `lat` double DEFAULT NULL,
  `long` double DEFAULT NULL,
  `token` varchar(225) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

lvt*_*llo 6

您必须将入口点脚本添加到数据库中。不适用于您的应用程序(我不清楚 dockerfile)。有关更多详细信息,您可以查看此答案

docker-compose.yml(基本无持久性)

version: '3.1'

services:
  mysql:
   image: mysql
   restart: always
   container_name: db-mysql
   ports:
    - 3307:3306
   environment:
     MYSQL_DATABASE: path
     MYSQL_ROOT_PASSWORD: root
     MYSQL_USER: testuser
     MYSQL_PASSWORD: testpassword
   volumes:
    - ./dump:/docker-entrypoint-initdb.d
Run Code Online (Sandbox Code Playgroud)

首先检查用户。默认情况下,root 用户已经存在,因此给 mysql_user 一个不同的名称。其次我挂载一个目录,而不是一个文件。我有一个目录dump,其中包含我的dump.sql(也非常基本):

CREATE TABLE paths (
  id int(11)
)
Run Code Online (Sandbox Code Playgroud)

树看起来像这样:

docker-compose.yml
dump/
Run Code Online (Sandbox Code Playgroud)

dump/ 包含 dump.sql

在容器启动期间,这是dump/安装在 mysql 容器内的目录。

$ docker-compose up -d

docker exec -it db-mysql bash
Run Code Online (Sandbox Code Playgroud)

Authenticate(可以选择,普通用户的root_user)我用的是普通的:

root@a110fe08e4b6:/# mysql -u testuser -p
Enter password:
Run Code Online (Sandbox Code Playgroud)

检查数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| path               |
+--------------------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

使用路径和检查表:

mysql> use path;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_path |
+----------------+
| paths          |
+----------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

显示路径表中的列:

mysql> show columns from paths;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)