如何为docker容器上运行的mysql设置对本地文件系统上文件的访问

tktrz96b  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(391)

我在docker中安装mysql5.6。
我创建docker-compose.ym并设置db的属性

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/

但我不能用函数
选择加载文件('/home/marina/some path/some path more/image.jpg')。
如何配置卷以从docker访问我的文件?

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

并设置命令:

command: --secure-file-priv=''
ubby3x7f

ubby3x7f1#

尝试Map到/var/lib/mysql。不建议使用mapping/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 在你的容器主机上。这将Map下的文件 /var/lib/mysql 在容器内。
猛击容器 docker exec -it <container-id> bashSELECT LOAD_FILE('/var/lib/mysql/image.jpg')

j0pj023g

j0pj023g2#

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

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

第二,我猜您混淆了主机路径和容器路径。在给出的例子中,在容器内部应该使用这样的东西 SELECT LOAD_FILE('/mydata/image.jpg')

相关问题