如何为在Docker容器上运行的MySQL设置对本地文件系统上文件的访问权限

时间:2018-12-17 15:16:03

标签: mysql docker docker-compose

我在docker中安装了MySQL5.6。

我创建docker-compose.ym并设置数据库的属性

t

但是我不能使用功能

选择LOAD_FILE('/ home / marina / some-path / some-path-more / image.jpg')。

如何配置卷以从Docker访问我的文件?

db:
  container_name: db_mysql
  image: mysql:5.6
  command: --secure-file-priv='/var/lib/'
  environment:
    MYSQL_DATABASE: devdb
    MYSQL_ROOT_PASSWORD: ""
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  ports:
    - "3306:3306"

  volumes:
     - /home/marina/some-path:/var/lib/

并将音量更改为:

Need mount my local file system to docker machine
# Create the "default" machine, but then stop it.
docker-machine create --driver virtualbox default
docker-machine stop
# Add a new shared folder through virtualbox
VBoxManage sharedfolder add default --name "userhome" --hostpath 
"/home/marina/"
# Turn the machine back on, and mount the share
docker-machine start
docker-machine ssh default 'sudo mkdir --parents /home/marina'
docker-machine ssh default 'sudo mount -t vboxsf userhome /home/marina'
# Check it works
docker-machine ssh default 'ls /home/marina'
# Start it up
docker-compose up

并设置命令:

volumes:
    - /home/marina/workprojectdir:/home/marina/workprojectdir

2 个答案:

答案 0 :(得分:0)

首先,我将避免使用/var/lib作为容器路径,因为该路径通常存在,并且您可能会损坏容器内的数据。使用类似的东西:

volumes:
  - /home/marina/some-path:/mydata

第二,我想您正在混淆主机路径和容器路径。给出示例之后,在容器内,您应该使用类似SELECT LOAD_FILE('/mydata/image.jpg')

答案 1 :(得分:0)

尝试映射到/ var / lib / mysql。不建议映射/ var / lib。

db:
  container_name: db_mysql
  image: mysql:5.6
  command: --secure-file-priv='/var/lib/mysql'
  environment:
    MYSQL_DATABASE: devdb
    MYSQL_ROOT_PASSWORD: ""
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  ports:
    - "3306:3306"

  volumes:
     - /home/marina/some-path:/var/lib/mysql
  • 将image.jpg复制到容器主机上的/home/marina/some-path中。这会将文件映射到容器内/var/lib/mysql下的文件中。
  • 扑向容器 docker exec -it <container-id> bash
  • 运行 SELECT LOAD_FILE('/var/lib/mysql/image.jpg')