docker on OSX slow volumes

2019-03-17 06:36发布

I'm trying to use docker beta on OSX, mainly for Symfony development but the mounted volumes are incredible slow. Even for a vanilla Symfony project I get 6s page load time. That's unbearable! Has anyone found a solution to this issue? Trying to move away from vagrant but I just can't find any reasonable way to work with docker instead.

标签: docker
10条回答
Rolldiameter
2楼-- · 2019-03-17 07:11

In latest docker 17.06.0-ce-mac18 volumes mounted with :cached seems to run quite decent.

查看更多
闹够了就滚
3楼-- · 2019-03-17 07:16

There's a long thread with explanation from Docker Team and various workarounds.

Currently, the issue is being tracked on GitHub.

While some workarounds may be better than others, I'm afraid the ideal option for now is to switch to Linux.

查看更多
我只想做你的唯一
4楼-- · 2019-03-17 07:18

I had exactly the same thing. For me using docker-bg-sync (see on GitHub) made a dramatic improvement in speed and CPU usage.

Not as nice as just mounting the volume as you have to start a new container for every sync but it does the job.

查看更多
叛逆
5楼-- · 2019-03-17 07:20

Okay the user Spiil gave a solution but I wanted to elaborate on the exact steps to take since I went through 12 hours trying to figure it out, but once you know how its super easy and fixes all the slow down issues!

The key here is to understand this solution creates NFS (Network File System) drives as the means of communication from the Docker Containers to your Mac instead of the standard OSX File System which is very slow currently either due to bugs or the way it works*

Follow these steps exactly.

1.) Clone this repo here (https://github.com/IFSight/d4m-nfs) in your home directory. To do this open up terminal and type cd ~

Then type git clone https://github.com/IFSight/d4m-nfs

Alternatively you can also do this in a one liner git clone https://github.com/IFSight/d4m-nfs ~/d4m-nfs

2.) Next go into the d4m-nfs folder and create a new file in the /etc folder and title it d4m-nfs-mounts.txt

3.) Add the following lines of code to this.

/Users/yourusername:/Users/yourusername:0:0

What the above does is allows you to still use relative folders with docker-compose and allows all ports to connect on it hence the 0:0.

EDIT Do not put /Volumes here!!

4.) Go to your docker preferences and do the following

enter image description here

Make sure only /tmp is showing and NOTHING ELSE. I mean nothing else it won't work if there is anything else since it will create conflicts with the NFS systems that the script will make for you later. Restart docker and docker-compose down any containers as well.

5.) Finally navigate to the d4m-nfs directory we created in step 1 and type the following command, /bin/bash d4m-nfs.sh

edit The correct way to type the command above is this as another user from the github (if-kenn) pointed out, ./d4m-nfs.sh which uses the Shebang for what shell should run it.

If done correctly there should be no errors and this should work. Please note DO NOT RUN as sh d4m-nfs.sh this will create errors and you will have to delete your exports file to start over. In fact anytime you make any changes you will have to clear your exports file.

This is what mine looks like.

enter image description here

EDIT:: IMPORTANT -- Remove the /private and volumes! This should only be users/username now!

If you see anything other than this you were not running with bash. You can quickly get to the exports file like this in Mac if you make any errors and just clear it out to start over.

Just select go to folder

enter image description here

and then type /etc/exports

This is a nice shortcut to quickly get to it and clear it out in your favorite text editor.

Also make sure no containers are running or you will get the ........ loop of death. If this loop of death continues make sure you upgrade docker and then restart your computer. Yes restart... it seemed to be the only way to get it to work on my friends computer. Refer to this (https://github.com/IFSight/d4m-nfs/issues/3)

Note to .... loop. I recently found another solution. Make sure you are NOT logged as root, and make sure you pulled the git repo into your users ~ folder not the root ~ folder. In otherwords, it should be in Users/username.

Also, make sure /tmp folder has full write permissions since the script needs to write here or this won't work either. chmod 777 -R /tmp

6.) If you did it right when running the script it will look like this.

enter image description here

Then simply run your docker-compose up -d as usual in your symfony project folder (or whatever project you are using with docker) and everything should work... except NO MORE slow downs!

You will need to run this anytime you restart your computer or docker.

Also note if you get mounting errors showing up, you probably don't have your project stored in your Users/username directory. Remember that is where we mounted it. If your project is somewhere other than there you will need to modify the d4m-nfs-mounts.txt file accordingly.

Other Info:

enter image description here

查看更多
登录 后发表回答