使用 Docker 访问 /etc/mysql/my.cnf

使用 Docker 访问 /etc/mysql/my.cnf

如果我使用这个docker-compose ,我该如何编辑/etc/mysql/my.cnf?我需要注释掉bind-address以允许来自所有主机的连接。

https://github.com/indiehosters/piwik/blob/master/docker-compose.yml

答案1

使用其 ID 访问 Docker 容器

sudo docker exec -i -t 665b4a1e17b6 /bin/bash

导航到 /etc/mysql/my.cnf

  cd /etc/mysql/my.cnf

安装 Nano 文本编辑器

apt-get install nano

导出环境变量

export TERM=xterm

编辑文件

nano my.cnf

答案2

您不应该编辑容器内的文件。您可以使用 覆盖文件--volume,但您应该创建一个新的容器,并根据自己的需要进行自定义。在您正在使用的容器上构建,如下所示:

FROM foo/bar:1.0
USER root
RUN sed -i -e "/^bind-address/d" /etc/mysql/my.cnf
USER mysql

答案3

编辑容器中的文件在开发过程中是一个非常常见的用例。

我建议你看一下 bind-mount— 在运行时在 Docker 容器内挂载本地项目目录/文件。

# Note this is ONLY for the local Docker environment.
# It has nothing to do with deployments.

version: "3.8"
services:

  # Local mock database.
  database:
    image: mysql/mysql-server:8.0
    restart: always
    container_name: database
    env_file:
      - .env
    ports:
      - "3306:3306"
    volumes:
      # Files
      - ./db/my.cnf:/etc/my.cnf:ro
      # Dirs
      - ./db/datadir/:/var/lib/mysql:rw
      - ./db/initdb.d/:/docker-entrypoint-initdb.d:ro

在您的本地项目目录中,您有一个名为的子目录,db/其中有一个名为的文件my.cnf(以及可选的其他用于数据的卷挂载)。

如果 Docker 镜像已经有一个文件在/etc/my.cnf,以这种方式安装将覆盖来自本地文件系统的超过内置的,这样容器就只能看到本地文件系统中的那个。如果没有卷挂载,它就只能看到内置的那个。

相关内容