Docker-compose如果定义了卷,就无法启动MySQL

3
我希望您能够为我的MySQL容器创建一个卷,以便数据可以持久化。因此,在我的docker-compose中,我创建了一个卷,用于存储数据。
这是我的docker-compose:
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: .docker/Dockerfile
    image: portfolio
    ports:
      - 80:80
    volumes:
      - .:/var/www/html
    links:
      - mysql
    environment:
      DB_HOST: mysql
      DB_DATABASE: blog
      DB_USERNAME: blog
      DB_PASSWORD: ...
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: blog
      MYSQL_USER: blog
      MYSQL_PASSWORD: ...
      MYSQL_ROOT_PASSWORD: ...
    volumes:
      - "./db:/var/lib/mysql"

该卷在文件末尾定义。不幸的是,这并没有起作用。如果我运行“docker container ls”,它只显示资产组合容器,而如果我运行“docker container ls -a”,它会显示MySQL容器,但它说在我运行“docker-compose up -d”之后立即“退出”。因此,显然它已经启动了,但随后立即崩溃或类似情况发生。
如果我删除与MySQL卷相关的最后两行,则可以正常工作。我的容器都已启动,并且应用程序正常工作。因此,基本上导致容器崩溃的原因是卷,因此可能我没有正确定义它。你认为呢?

“./db” 目录是空的吗?当您连接卷并启动 MySQL 时,MySQL 是否有任何提示信息? - David Maze
db目录确实是空的,但是当我执行docker-compose up时,MySQL和Docker都没有任何提示。顺便说一下,这次我尝试使用MySQL 8.0,但结果是一样的。当然,由于MySQL容器没有启动,所以当我尝试访问应用程序时,会出现PHP/PDO错误。 - tomfl
糟糕了,我的错。当我运行docker-compose up时,MySQL确实会给我一个错误。看起来这与权限有关: "无法创建/写入文件'/var/lib/mysql/is_writable'(OS errno 13 - 权限被拒绝)"。 - tomfl
我遇到了同样的问题。这个问题有什么解决办法? - intergallactic
使用引号对我很有效。 - Leonardo Santos
显示剩余3条评论
1个回答

0
我在Windows系统上发现虽然我的本地卷(即./db)看起来是空的,但它实际上并不是。最终我在同一文件夹上运行了ls -la命令,并在其中显示了一个 .sock文件。一旦我删除了(rm -f *.sock) 并运行了docker-compose up --build,似乎就可以正确地挂载该卷了。

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