当前位置: 首页 > 面试题库 >

启用登录docker mysql容器

祝允晨
2023-03-14
问题内容

我正在尝试熟悉docker生态系统并尝试设置mysql数据库容器。与docker-compose此类似:

version: '2'
services:
  db:
    image: mysql:5.6.33@sha256:31ad2efd094a1336ef1f8efaf40b88a5019778e7d9b8a8579a4f95a6be88eaba
    volumes:
      - "./db/data:/var/lib/mysql"
      - "./db/log:/var/log/mysql"
      - "./db/conf:/etc/mysql/conf.d"
    restart: "yes"
    environment:
      MYSQL_ROOT_PASSWORD: rootpw
      MYSQL_DATABASE: db
      MYSQL_USER: db
      MYSQL_PASSWORD: dbpw

我的conf目录包含一个文件:

[mysqld]
log_error       =/var/log/mysql/mysql_error.log
general_log_file=/var/log/mysql/mysql.log
general_log     =1
slow_query_log  =1
slow_query_log_file=/var/log/mysql/mysql_slow.log
long_query_time =2
log_queries_not_using_indexes = 1

不幸的是,我没有那样的任何日志文件。设置本身正确,并且使用了cnf文件。连接到容器并创建3个文件(将chown它们连接到mysql并重新启动容器)后,日志记录将按预期工作。

我很确定这是一种常见的情况,而我目前使它运行的方式似乎很愚蠢。 正确的方法是什么?

我可以通过将所有这些东西移到Dockerfile中来改进我的方法,但是这对我来说仍然很奇怪。


问题答案:

连接到容器并创建3个文件,将它们插入mysql并重新启动容器后,日志记录将按预期工作。

这指向主机卷权限问题。当您从容器映射到主机时,不会在用户ID上进行映射,并且容器内部uid附带的名称可能与外部的名称有很大不同。您需要使用容器用户可以写入的内容来初始化目录权限。一种简单的方法是创建一个有权写入主机和容器上文件的组,然后将各种用户添加到映像和主机OS上的该组中。另一种选择是使用您不能直接从主机访问的命名文件系统,并使用映像的目录权限对其进行初始化。

编辑:使用您的docker-compose.yml命名卷的示例非常简单:

version: '2'
volumes:
  mysql-data:
    driver: local
  mysql-log:
    driver: local
  mysql-conf:
    driver: local

services:
  db:
    image: mysql:5.6.33
    volumes:
      - "mysql-data:/var/lib/mysql"
      - "mysql-log:/var/log/mysql"
      - "mysql-conf:/etc/mysql/conf.d"
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpw
      MYSQL_DATABASE: db
      MYSQL_USER: db
      MYSQL_PASSWORD: dbpw

请注意,我还从您的映像名称中删除了sha256,此引用将阻止您提取已修补的映像版本。我还更喜欢“永不停止”的重启策略,以便Docker在重启时执行预期的操作。



 类似资料:
  • 我试图调试我的案例,简单的ActiveWeb应用程序没有在Jetty下运行。它的行为就像不存在任何用于请求处理的类一样,并返回错误404。 问题不在于ActiveWeb。是关于码头的。如何发现Jetty有一些web应用程序,它有一个带注释的类,并将在HTTP请求下执行它? 目前我已经下载了Jetty,它可以工作。不幸的是,它没有日志记录。当404错误返回时,没有任何东西显示在或中,也没有任何文件显

  • 我在fedora-20中创建了一个lxc容器,其中包含默认配置文件和默认fedora模板。 当我尝试启动容器时,我遇到了用户名和密码提示。 在ubuntu中,他们似乎使用默认的“ubuntu”作为用户名和密码。我尝试了不同的密码组合,如模板中指定的“root”,但无法登录。 这是输出:

  • 我已经创建了react应用程序,并使用下面提供的okta示例使用okta登录。 https://developer.okta.com/code/react/okta_react/#add-an-openid-connect-client-in-okta 我可以通过输入凭据并点击登录按钮成功地从我的应用程序登录到应用程序。 但是,如果我登录到okta开发帐户,然后如果我导航到我的应用程序,我的应用程

  • 我正在尝试使用SP在OKTA(IdP)中使用我的Windows应用程序(SP)启动登录来设置SAML,但是在IDP验证我的凭据后,我收到了一个400错误的SAML请求。我没有重定向回应用程序URL(SP),而是收到了一个400错误的SAML请求。 我的SP URL-https://sampleapp.company.com/appname/default.aspx 我的SAML ACS URL-h

  • 我在我的JSF应用程序中使用容器管理的安全性,因此我有一个低于默认设置的登录页面。 现在在登录页面中,我想在登录按钮旁边添加一个按钮,以允许用户注册。 但我该如何将其转发到我的登记簿。我的注册按钮的xhtml页面?我用以下代码进行了尝试: 我也尝试将表单更改为h: form,以便我可以使用p:命令按钮,但正如我注意到的,我的登录页面不工作,当我单击提交按钮时什么也没有发生。 如何实现我想做的事?

  • Spring保安的新手。我已经通过了一些教程并实现了Spring Security。我有几个页面,我通过登录保护。 这是我的spring-security.xml档案 从我的index.jsp,当我试图访问URL时,它要求身份验证。我有注销网址。在JSP页面内。 控制器 很好用。除了几件事当我尝试转到时,它直接转到页面,而不是询问身份验证。为什么?如何解决?我是否需要在截取URL中提及所有URL(