【问题标题】:Running Docker Container locally在本地运行 Docker 容器
【发布时间】:2022-01-22 04:03:01
【问题描述】:

我有一个 Docker 映像,它在我的 Jenkins 流水线中用于执行大量工作,例如构建和运行测试。这些测试使用 docker。该图像在 Jenkins Pipeline 上运行良好。我正在尝试在本地连接到该图像。我已按照以下步骤操作:

1. docker-compose build
2. docker run -it container_name /bin/bash

进入容器后,我想运行使用 docker 的测试并得到以下错误: connect ENOENT /var/run/docker.sock

另外,我尝试运行 docker ps 我得到了这个: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

对此有何建议?

编辑 1:我的 docker-compose.yml 看起来像:

version: '2.0'

services:
  build:
    build: .
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    entrypoint: sh
    command: >
      sh -c "npm install"

Dockerfile:

FROM Imageeee

USER root

WORKDIR /app

COPY ./package*.json ./

RUN npm install

COPY ./ ./

RUN npm run build

【问题讨论】:

  • 您使用的帐户是否有足够的权限来运行此命令?
  • @WilkovanderVeen 是的
  • 您到底在构建什么,从外观上看,docker 容器中的一个 docker(?),并试图连接到 dind 容器内的 docker,需要启动首先是容器内部的 docker 守护进程(当您覆盖 CMD 时)并且假设 dind 服务作为 --priviliged 容器 as per the doc 运行。
  • @curious_coder 请用您的docker-compose.yml 规范的副本更新问题。我怀疑因为您覆盖了CMD,所以dockerd 进程没有启动,如果它没有启动就无法连接。
  • @masseyb 是的

标签: docker jenkins docker-compose dockerfile docker-container


【解决方案1】:

TL;DR

docker run 不使用docker-compose.yml 规范中定义的配置。没有挂载docker daemon socket,也没有在容器内运行docker daemon,就没有docker daemon 可以连接。


你可以用 YAML 格式定义你的服务配置:

version: '3.7'
services:
  build:
    image: docker:20.10.12-dind
    container_name: dind
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock'

...然后使用docker-compose run ...创建一个容器

... 或更新docker run 命令行,例如:

docker run --rm -it \
    --entrypoint docker \
    -v /var/run/docker.sock:/var/run/docker.sock \
    docker:20.10.12-dind ps

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2021-06-26
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多