Linux 在docker容器中运行docker compose

Linux 在docker容器中运行docker compose,linux,docker,docker-compose,operating-system,dockerfile,Linux,Docker,Docker Compose,Operating System,Dockerfile,我正在构建一个docker文件,它将使用Localstack来构建一个模拟AWS环境,在我使用docker compose文件在本地执行此操作的那一刻,所以我想我可以在构建docker文件时复制docker-compose.yml,然后从dockerfile运行docker compose,这样我就可以从dockerfile创建的容器中运行我的应用程序 这是docker编写文件 version: '3.1' services: localstack: image: localsta

我正在构建一个docker文件,它将使用Localstack来构建一个模拟AWS环境,在我使用docker compose文件在本地执行此操作的那一刻,所以我想我可以在构建docker文件时复制docker-compose.yml,然后从dockerfile运行docker compose,这样我就可以从dockerfile创建的容器中运行我的应用程序

这是docker编写文件

version: '3.1'

services:
  localstack:
    image: localstack/localstack:latest
    environment:
      - AWS_DEFAULT_REGION=us-east-1
      - EDGE_PORT=4566
      - SERVICES=lambda,s3,cloudformation,sts,apigateway,iam,route53,dynamodb
    ports:
      - '4566-4597:4566-4597'
    volumes:
      - "${TEMPDIR:-/tmp/localstack}:/temp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

这是我的文件

FROM node:16-alpine

RUN apk update

RUN npm install -g serverless; \
    npm install -g serverless-localstack;

WORKDIR /app
COPY serverless.yml ./
COPY localstack_endpoints.json ./
COPY docker-compose.yml ./
COPY --from=library/docker:latest /usr/local/bin/docker /usr/bin/docker
COPY --from=docker/compose:latest /usr/local/bin/docker-compose /usr/bin/docker-compose

EXPOSE 3000
RUN docker-compose up
CMD ["sls","deploy" ]
但我收到的错误是

#17 0.710 Couldn't connect to Docker daemon at http+docker://localhost - is it running?
#17 0.710 
#17 0.710 If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

我是Docker的新手,当我在线研究错误时,我看到有人说它需要用Sudo运行,虽然我认为在这种情况下,这与我的卷链接到运行容器的主机有关,但确实不确定。

在Docker容器内尝试访问套接字,但它无法访问。因此,当您想要运行容器时,请使用

  -v /var/run/docker.sock:/var/run/docker.sock 

它应该可以解决问题。

一般来说,您不能在Dockerfile中执行影响容器外部运行的持久状态或进程的操作。想象一下
docker build
ing您的图像,
docker将其推送到注册表,然后
docker将其拉到一个新系统上;如果构建步骤能够启动其他正在运行的容器,那么它们就不会在不同的系统上使用相同的映像运行

在更机械的级别上,构建序列无权绑定装载的主机目录或其他各种运行时设置。这就是为什么您会收到“无法连接到Docker守护程序”消息:构建容器没有运行Docker守护程序,并且无法访问主机的守护程序


与其尝试让容器嵌入Compose工具和Compose设置,您可能会发现只分发
docker Compose.yml
文件更容易,并使运行复合应用程序的标准方法在主机上运行
docker Compose up
。对Docker套接字的访问功能非常强大——您几乎可以轻松地使用它来创建主机的根目录——我不需要它来避免主机上需要一个相当标准的工具。

当我使用Docker build-t serverless/Docker进行构建时,我遇到了这个错误。不是在我开集装箱船的时候,我想这在码头上是不可能的。您可以使用#创建脚本/bin/bash docker compose up-d sls部署并共享套接字,如我所说,并在运行容器后运行脚本我有一个docker compose文件,它启动模拟数据库,然后我可以在本地使用我的应用程序,希望创建我的应用程序的容器,并在其中旋转模拟数据库。我想当我启动我的应用程序docker容器时,我可以引用hosts localhost,而不是从它内部创建一个compose?你能从相同的
docker compose.yml
文件启动这两个部分吗?我仍然需要一个docker文件来从我的应用程序创建一个容器吗?我用docker命令构建并运行它,这可以在docker compose文件中完成吗?