Created
September 1, 2021 15:04
-
-
Save visualphoenix/1bfa6f05289902bf2858bc5357e7d971 to your computer and use it in GitHub Desktop.
docker-machine setup for mac with nfs and vmware
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# the following functions can be used to provision, or reprovision docker-machine as a replacement for docker-for-mac | |
# it has only been tested with vmware on osx catalina | |
# | |
# it assumes the following has already been run: | |
# brew install docker-machine docker | |
# | |
get-interface-ip-from-ip-route() { | |
local ip="${1}" | |
ifconfig -m "$(route get "${ip}" | awk '{if ($1 ~ /interface:/){print $2}}')" | awk 'sub(/inet /,""){print $1}' | |
} | |
idempotent-append() { | |
local LINE="" FILE="" SUDO="" | |
LINE="$1" | |
FILE="$2" | |
SUDO=$([[ -w "$FILE" ]] && echo "" || echo "sudo") | |
grep -qF -- "$LINE" "$FILE" 2>/dev/null || echo "$LINE" | $SUDO tee -a "$FILE" | |
} | |
nfs-setup() { | |
local interface_ip="" machine_ip="" | |
idempotent-append "$HOME -alldirs -mapall=$(id -u):$(id -g) localhost" /etc/exports | |
if [[ "$(docker-machine status)" == "Running" ]]; then | |
interface_ip=$(get-interface-ip-from-ip-route "$(docker-machine ip "$(docker-machine active)")") | |
idempotent-append "$HOME -alldirs -mapall=$(id -u):$(id -g) $interface_ip" /etc/exports | |
machine_ip=$(docker-machine ip "$(docker-machine active)") | |
idempotent-append "$HOME -alldirs -mapall=$(id -u):$(id -g) $machine_ip" /etc/exports | |
fi | |
idempotent-append "nfs.server.mount.require_resv_port = 0" /etc/nfs.conf | |
sudo nfsd restart | |
} | |
docker-machine-reset() { | |
local driver="vmware" | |
driver="${1:-$driver}" | |
docker-machine ls -q | xargs docker-machine rm -y | |
eval docker-machine create --driver="${driver}" --"${driver}"-boot2docker-url https://github.com/kaosagnt/boot2docker-xfs-ng/releases/download/20.10.8/boot2docker.iso default | |
eval "$(docker-machine env default)" | |
host_docker_internal=$(get-interface-ip-from-ip-route "$(docker-machine ip default)") | |
docker-machine ssh default "l=\"$host_docker_internal host.docker.internal\"; grep -qF \"\$l\" /etc/hosts 2>/dev/null || echo \"\$l\" | sudo tee -a /etc/hosts 2>/dev/null; [[ -e /var/run/rpcbind.sock ]] || sudo /usr/local/etc/init.d/nfs-client start" | |
while read -r exported_folder | |
do | |
docker-machine ssh default "sudo mkdir -p $exported_folder; sudo mount -t nfs -o rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountvers=3,mountproto=tcp,local_lock=posix host.docker.internal:$exported_folder $exported_folder" | |
done < <(cat /etc/exports | awk '{print $1}' | sort -u) | |
docker-machine ssh default "echo '{\"max-concurrent-uploads\":10,\"max-concurrent-downloads\":10}' | sudo tee /etc/docker/daemon.json" | |
docker-machine ssh default "sudo sed -i'' -e 's/ulimit -p unlimited/ulimit -u unlimited/' /etc/init.d/docker; sudo /etc/init.d/docker restart" | |
} | |
mount-home-volume() { | |
docker volume create -d local -o type="nfs" -o o="addr=host.docker.internal,rw,local_lock=posix,hard,nointr,nfsvers=3,rsize=1048576,wsize=1048576,timeo=600,retrans=2,noresvport" -o device=":$HOME" --name home_nfs &> /dev/null | |
echo "-v \"home_nfs:$HOME\" -e \"HOST_HOME=$HOME\" -w \"$PWD\"" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment