docker在mac上的使用及常见问题
安装方式
下载客户端
在这里选择版本和系统
https://docs.docker.com/engine/install/ 选择版本可下载docker客户端。
我用客户端在docker build/pull出了很多问题,所以推荐采用以下方式
homebrew安装
- 安装homebrew
mac os terminal /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装docker
1 |
|
- 插件
然后配置docker-compose作为插件,这样就可以使用docker compose命令行
首先创建一个文件夹存放docker命令行插件
mkdir -p ~/.docker/cli-plugins
然后将docker-compose命令符号链接到新文件夹
ln -sfn $(brew --prefix)/opt/docker-compose/bin/docker-compose ~/.docker/cli-plugins/docker-compose
运行docker compose
docker compose
验证是否安装成功
另外可能需要buildx来构建容器,安装并符号链接到上述文件夹
1 |
|
- 验证docker runtime成功安装
1 |
|
表明安装成功
问题总结
“/app/dist”: not found
先检查tsconfig.json有没有设置outDir为dist,排除是路径不存在的问题
docker build安装ffmpeg这一步报错,可能是内存不够导致的失败
修改了更大的内存:
1 |
|
docker engine修改客户端卡住
客户端这里不要轻易改,我改了之后就卡住了
Error load metadata for docker.io
- 删除缓存,重新登录
1 |
|
https://medium.com/@matijazib/how-to-fix-the-error-load-metadata-for-docker-io-when-building-your-docker-image-on-macos-ec6deee664fd
https://serverfault.com/questions/1130018/how-to-fix-error-internal-load-metadata-for-docker-io-error-while-using-dock
1 |
|
这个命令会删掉所有停掉的容器/未使用的网络或镜像/所有构建的缓存
- 可能需要检查credential
1 |
|
https://github.com/docker/for-mac/issues/2131
https://davejansen.com/docker-credentials-store/
https://github.com/abiosoft/colima/issues/167
docker desktop卡住打不开/starting the docker engine
-
Applications > Utilities > Activity Monitor.app杀死所有docker进程
-
删掉之前的容器
sudo rm -rf ~/Library/Containers/com.docker.*
设置里面~/Library/Group\ Containers/group.com.docker/settings.json找到"filesharingDirectories":删掉[]中间的值
https://stackoverflow.com/questions/69552636/cannot-launch-docker-desktop-for-mac
- 如果能打开desktop可以重新卸载再安装
代理设置错误
1 |
|
因为我在Dockerfile里面加了环境变量
1 |
|
-
参考官方文档,应该使用build time variables才能在build的时候使用代理。
Dokerfile里面的ENV变量会一直影响到中间或者最后生成的image镜像,通过--build-arg
添加的环境变量需要每次build的时候都加上
build命令修改成以下
1 |
|
mac M1 上失败
- Mac 在build的时候,要加上
--platform linux/amd64
https://www.cbui.dev/how-to-build-amd64-docker-images-on-apple-silicon/
https://www.macstadium.com/blog/building-docker-images-on-apple-silicon-with-buildx
或者设置环境变量中加上默认docker平台的设置
- “/app/dist”: not found / apt-get canceled
可能是内存不够,修改memory更大
https://stackoverflow.com/questions/77904246/docker-m1-mac-for-google-cloud-run-build-hangs
https://github.com/Chanzhaoyu/chatgpt-web/issues/839
- docker pull: Error response from daemon: Get "https://registry-1.docker.io/v2
- colima
可能是docker desktop的问题,可通过colima下载配置docker
https://github.com/docker/for-mac/issues/6704
- 代理配置
参考https://github.com/docker/for-mac/issues/6481
修改一下代理配置
https://docs.docker.com/network/proxy/
~/.docker/config.json加上这个
1 |
|
或者是在docker destop -> settings -> Resources -> Proxies里面添加以上配置。
- clash代理
改用tun模式,如果是docker desktop需要在Resources -> Proxies里面加上http/https代理配置,如果是orbstack需要orb config network_proxy socks5://127.0.0.1:7897
。
Dockerfile
开发阶段
1 |
|
生产阶段
开发阶段,所有根目录下面的文件都复制了。在生产阶段,为了减少复制的文件,dockerfile只复制了编译的文件
如果需要用到根目录下面的文件例如一个视频文件xxx.mov,但是没有复制过去,可以用命令docker cp ./xxx.mov <container-id-or-name>:/app/xxx.mov
复制host上的视频到容器里面
和部署步骤差不多,分为build和production阶段
1 |
|