Linux 在docker容器中运行docker compose
我正在构建一个docker文件,它将使用Localstack来构建一个模拟AWS环境,在我使用docker compose文件在本地执行此操作的那一刻,所以我想我可以在构建docker文件时复制docker-compose.yml,然后从dockerfile运行docker compose,这样我就可以从dockerfile创建的容器中运行我的应用程序 这是docker编写文件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
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文件中完成吗?