MySQL Docker容器退出代码1

12

我想在Windows上使用Docker容器来运行MySQL。当我尝试在Docker Compose文件中使用docker-compose up命令时,出现以下结果。

> D:\dockerfiles>docker-compose up
db_1  | Initializing database
db_1  | 2018-10-08T09:00:29.024081Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
db_1  | 2018-10-08T09:00:29.024224Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
db_1  | 2018-10-08T09:00:29.024512Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1  | 2018-10-08T09:00:29.028590Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
db_1  | 2018-10-08T09:00:29.028673Z 0 [ERROR] Aborting
db_1  |
dockerfiles_db_1 exited with code 1

以下是我的docker-compose.yml文件

version: '3.7'

services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: star
      MYSQL_USER: user
      MYSQL_PASSWORD: pass

更新 Docker Compose 文件

version: '3.7'

services:
  mysqldb:
    image: mysql:5.7
    container_name: mysql_con1
    command: --default-authentication-plugin=mysql_native_password
    command: --disable-partition-engine-check
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: star
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    volumes:
      - "./:/var/lib/mysql"
    networks:
      - samplenet
networks:
  samplenet:
    driver: nat

欢迎来到SO。请确保代码块被包含在{}中以提高可读性。 - gravetii
请参阅 https://github.com/docker-library/mysql/issues/290。 - Frank AK
GitHub的解决方案不起作用。 - Mohamed Ahmed Sayed
“- "./:/var/lib/mysql"” 的问题在于,当前目录(“./”)不为空。它包含了 Docker-compose 文件。 - Dhirendra
我将“'./:/var/lib/mysql'”更改为“./data”,但是出现了相同的错误。 - Mohamed Ahmed Sayed
4个回答

13

/var/lib/mysql目录下有一些文件。请删除该目录下的所有内容。 或者强烈建议在docker-compose.yml中使用卷。

volumes:
  - /my/own/datadir:/var/lib/mysql

更新: 我使用以下的compose文件进行测试,没有任何错误,它正常工作。

version: '3.7'

services:
  db:
    image: mysql:5.7
    restart: always
    volumes:
    - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: star
      MYSQL_USER: user
      MYSQL_PASSWORD: pass

抱歉我的信息很少,但是/my/own/datadir和/var/lib/mysql是什么? - Mohamed Ahmed Sayed
"/my/own/datadir" 是您想在主机上存储数据库文件的路径,而 "/var/lib/mysql" 则是 MySQL 在容器中存储它们的路径。 - Dhirendra
但是mysql Dockerfile添加了默认挂载点VOLUME /var/lib/mysql,这指示mysql容器将数据库文件存储在主机机器上的/var/lib/mysql目录中。 - Dhirendra
4
请务必删除现有的失败容器。您可以使用 docker-compose down 命令来执行此操作。 - Dhirendra
我会执行这个操作,并删除旧的卷。 - Mohamed Ahmed Sayed
显示剩余3条评论

3
对于使用docker run命令并添加--detach|-d标志的用户,请删除并重新运行容器,但不要使用-d标志。这样应该会提供失败原因的错误消息。

0

在docker-compose.yml中更新卷

volumes:
  - /my/own/datadir:/var/lib/mysql

更新:这个组合文件,它运行良好。

mysql:
    image: mysql:5.7.22
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3307:3306"
    volumes:
      - /my/own/datadir:/var/lib/mysql
    environment:
      MYSQL_USERNAME: "root"
      MYSQL_PASSWORD: "root"
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: test

0

我定义了"restart=always",出现了相同的行为。如果我将其删除,一切都正常,然后我运行命令。

docker update --restart=always {{ID OF CONTAINER}}

这会让它始终重新启动。希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接