如果我使用这个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
,以这种方式安装将覆盖来自本地文件系统的超过内置的,这样容器就只能看到本地文件系统中的那个。如果没有卷挂载,它就只能看到内置的那个。