gpt4 book ai didi

docker - docker容器中的mysql无法通过os x上的挂载卷运行

转载 作者:IT老高 更新时间:2023-10-28 21:23:50 26 4
gpt4 key购买 nike

在 OS X 上。

我正在尝试通过 boot2docker 在 docker 容器中运行 mysql,方法是将卷 /var/lib/mysql 安装在主机上,这样我就可以拥有持久的 mysql 数据。我计划将来使用仅数据容器,但现在我正在尝试使用此选项来执行此操作。

我使用以下命令来运行容器:

docker run -v/Users/yash/summers/db:/var/lib/mysql -i -t '镜像名称'

/Users/yash/summers/db 文件夹已经存在。

我在这方面面临权限问题。使用命令行,我可以访问目录,创建/删除新文件,但是当我运行时service mysql start,出现如下错误:

150528 15:43:43 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
150528 15:43:43 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
150528 15:43:43 [Note] /usr/sbin/mysqld (mysqld 5.5.43-0ubuntu0.14.04.1) starting as process 909 ...
150528 15:43:43 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
150528 15:43:43 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.150528 15:43:43 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist
150528 15:43:43 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
150528 15:43:43 InnoDB: The InnoDB memory heap is disabled
150528 15:43:43 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150528 15:43:43 InnoDB: Compressed tables use zlib 1.2.8
150528 15:43:43 InnoDB: Using Linux native AIO
150528 15:43:43 InnoDB: Initializing buffer pool, size = 128.0M
150528 15:43:43 InnoDB: Completed initialization of buffer pool
150528 15:43:43 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
150528 15:43:44 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

过去 2 天我一直在尝试解决这个问题,浏览了很多页面,例如 this , this , 和 this .

我无法解决我的问题。我认为我无法完美地完成解决方案的建议。

据我了解,这些页面上列出了一些解决方法,包括更改 uid 和 guid,但我认为它们没有得到很好的解释。

任何人都可以向我解释一个详细的解决方法。

更新 1:我也尝试使用仅数据容器,但仍然面临同样的问题。

如果我不使用任何 -v--volumes-from 选项,我可以运行一切正常,所以我认为 mysql 中没有问题服务器。

更新 2:用于创建纯数据容器的 Dockerfile:

FROM ubuntu

RUN mkdir /var/lib/mysql

VOLUME /var/lib/mysql

最佳答案

有两种不同的解决方案。

  1. 解决方案 #1。使用 Dockerfile

    (我不喜欢它,因为我更喜欢 Docker Hub 的官方镜像,没有任何更改)

    RUN usermod -u 1000 mysql 添加到您的 Docker 文件以设置 ID 1000对于用户“mysql”(与 docker-machine 内部相同的 ID)。

  2. 解决方案 #2。使用 my.cnf

    我仍然使用我自己的配置,我更喜欢这个解决方案。我们已经有了 ID 为 1000 的 root 用户,因此我们可以用这个用户运行 MySQL:

    • my.cnf

      主行是 user = root(您可以使用 sed 仅更改文件中的这一行。我更喜欢挂载所有文件)

      [client]
      port = 3306
      socket = /var/run/mysqld/mysqld.sock
      default-character-set = utf8

      [mysqld_safe]
      pid-file = /var/run/mysqld/mysqld.pid
      socket = /var/run/mysqld/mysqld.sock
      nice = 0

      [mysqld]
      user = root
      pid-file = /var/run/mysqld/mysqld.pid
      socket = /var/run/mysqld/mysqld.sock
      port = 3306
      basedir = /usr
      datadir = /var/lib/mysql
      tmpdir = /tmp
      lc-messages-dir = /usr/share/mysql
      explicit_defaults_for_timestamp
      init_connect='SET collation_connection = utf8_unicode_ci'
      init_connect='SET NAMES utf8'
      character-set-server=utf8
      collation-server=utf8_unicode_ci
      skip-character-set-client-handshake

      # Instead of skip-networking the default is now to listen only on
      # localhost which is more compatible and is not less secure.
      #bind-address = 127.0.0.1

      #log-error = /var/log/mysql/error.log

      # Recommended in standard MySQL setup
      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

      # Disabling symbolic-links is recommended to prevent assorted security risks
      symbolic-links=0

      # * IMPORTANT: Additional settings that can override those from this file!
      # The files must end with '.cnf', otherwise they'll be ignored.
      #
      !includedir /etc/mysql/conf.d/
    • 使用此文件更改默认 my.cnf:

      docker run -it -v ./mysql/var/lib/mysql:/var/lib/mysql -v ./my.cnf::/etc/mysql/my.cnf mariadb:10.0.22

关于docker - docker容器中的mysql无法通过os x上的挂载卷运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30511475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com