Uri*_*Uri 8 macos github docker dockerfile github-actions
创建了一个 github 操作,用于为arm64平台构建docker镜像以快速构建它(无模拟)我使用macos-latest-xlarge
arm64机器
github操作代码示例如下:
name: Mac OS Issue
on:
workflow_dispatch:
jobs:
macos_issue:
name: Check Issue
runs-on: macos-latest-xlarge
steps:
- name: Check Issue
id: check_issue
run: |
set +e
brew install docker docker-buildx
docker --version
echo "FROM ubuntu:latest" > Dockerfile
docker build --no-cache -t test .
Run Code Online (Sandbox Code Playgroud)
运行时失败并出现以下错误
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Run Code Online (Sandbox Code Playgroud)
我尝试使用 macos-latest 进行模拟,但速度非常慢。所以一定是arm64机器
根据您的 GitHub Actions 工作流程,您正尝试在 macOS 运行程序 ( macos-latest-xlarge
) 上构建 Docker 映像,该运行程序似乎是 ARM64 计算机。但是,您会看到一条错误,表明 Docker 守护进程未运行。
+---------------------+ +------------------+
| GitHub Actions | | macOS ARM64 |
| Workflow | SSH | Runner |
| |------->| (macos-latest- |
| - Build Docker Image| | xlarge) |
| - ARM64 Platform | | |
+---------------------+ +------------------+
Run Code Online (Sandbox Code Playgroud)
与评论类似,我首先检查 Docker 是否已正确安装并在 macOS 运行器上运行。您可能需要显式启动 Docker 服务,因为默认情况下它在 macOS 运行器上不会启动。
GitHub Action 代码将是(作为问题 1456中提到的colima方法的替代方法):
name: Mac OS Issue
on:
workflow_dispatch:
jobs:
macos_issue:
name: Check Issue
runs-on: macos-latest-xlarge
steps:
- name: Install Docker
run: |
brew install --cask docker
- name: Start Docker
run: |
# Start Docker.app if not already running
if ! pgrep -f Docker.app; then
open -a /Applications/Docker.app
# Wait for Docker to be ready
while ! docker info >/dev/null 2>&1; do sleep 1; done
fi
- name: Build Docker Image
run: |
echo "FROM ubuntu:latest" > Dockerfile
docker build --no-cache -t test .
Run Code Online (Sandbox Code Playgroud)
该open --background -a Docker
命令在后台启动 Docker。例如,我在Abhimanyu Bajaj的“使用 Kind 和 AppDynamics 构建和监控 Kubernetes 集群”中看到了这种方法。
循环等待 Docker 守护进程准备就绪。while ! docker system info > /dev/null 2>&1; do sleep 1; done
我通过https://github.com/lhotari/action-upterm运行连接到 mac 实例的命令脚本:
Docker.app
正在运行但docker info
返回错误Run Code Online (Sandbox Code Playgroud)ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
该错误应表明 Docker CLI 无法与 Docker 守护程序通信。这可能是因为 Docker 守护进程未运行,或者存在权限问题。
由于您已Docker.app
通过 确认 Docker 守护进程正在 macOS 实例上运行action-upterm
,因此请确保 Docker 守护进程本身处于活动状态。您可以尝试重启Docker服务。
在 macOS 上,当前用户可能没有与 Docker 守护进程交互所需的权限。如果需要,检查并修改权限。(id -a
:至少寻找一个名为 的组docker
)
GitHub Action 代码为:
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
Run Code Online (Sandbox Code Playgroud)
由于您可以通过 action-upterm 访问 macOS 实例,因此可以使用此访问权限手动检查 Docker 的状态并以交互方式进行故障排除。并检查 Docker 日志以获取线索。确保没有环境变量干扰 Docker 的操作。
正在
Docker.app
运行但docker info
从未成功
尽管Docker.app
看起来正在运行,但它可能并未完全发挥作用。检查其状态和日志是否有任何问题。
name: Mac OS Issue
on:
workflow_dispatch:
jobs:
macos_issue:
name: Check Issue
runs-on: macos-latest-xlarge
steps:
- name: Install and Start Docker
run: |
brew install --cask docker
open -a Docker
- name: Check Docker Daemon
run: |
# Make sure Docker Daemon is running
if ! docker info; then
echo "Restarting Docker..."
osascript -e 'quit app "Docker"'
sleep 5
open -a Docker
# Wait for Docker to be ready
while ! docker info >/dev/null 2>&1; do sleep 1; done
fi
- name: Build Docker Image
run: |
echo "FROM ubuntu:latest" > Dockerfile
docker build --no-cache -t test .
Run Code Online (Sandbox Code Playgroud)
由于您可以通过 action-upterm 交互式访问 macOS 实例,因此可以使用它手动执行这些故障排除步骤。这可以提供即时反馈并更好地了解正在发生的事情。
macOS 运行器上的系统日志可能会提供有关问题所在的更多详细信息。这可能包括 Docker 启动期间的错误或特定 Docker 组件的问题。
Docker 守护程序日志可能包含详细的错误消息(位于/var/log/docker.log
或类似位置)。
如果安装在某种程度上已损坏或配置错误,卸载然后重新安装 Docker 可能会有所帮助。
归档时间: |
|
查看次数: |
456 次 |
最近记录: |