在docker start上创建表

时间:2018-03-30 10:48:00

标签: mysql sql docker

我是docker的新手,我创建了我的应用程序,我想发送给另一个开发人员,但我似乎无法运行它运行docker。

它说表不存在。我已经阅读过docker doc但是我没理解。

未创建表格。

我做错了什么?

我的dockerfile

FROM php:7.1-apache

RUN docker-php-ext-install pdo pdo_mysql

COPY ./dump.sql /docker-entrypoint-initdb.d/

我的码头作曲家

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

我的dump.sql有

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;

1 个答案:

答案 0 :(得分:1)

您必须将入口点脚本添加到数据库中。不是你的应用程序(dockerfile对我来说不明确)。有关详细信息,请查看此answer

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

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

CREATE TABLE paths (
  id int(11)
)

树看起来像这样:

docker-compose.yml
dump/

dump/包含dump.sql

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

$ docker-compose up -d

docker exec -it db-mysql bash

验证(您可以选择普通用户的root_user)我使用正常的:

root@a110fe08e4b6:/# mysql -utestuser -p
Enter password:

检查数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| path               |
+--------------------+
2 rows in set (0.00 sec)

使用路径和检查表:

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)

显示路径表中的列:

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