docker - 我如何在加载Docker容器后不运行docker-compose up的情况下运行它?

标签 docker docker-compose

我创建了一个Dockerfiledocker-compose.yml文件。我可以在构建并运行Django Web应用程序的Windows 10上运行docker-compose up。然后,我可以成功浏览到127.0.0.1:7000并练习我的Web应用程序。
我的问题是,一旦退出,如何在不运行docker-compose up的情况下启动图像?
当我键入docker images时,我看到两个图像:pythonmy_web_app。我试过了

docker run --publish 7000:8000 -- detach my_web_app
但它立即退出。
我的Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN useradd user
USER user
我的docker-compose.yml
version: "3"

services:
  web:
      build: .
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - .:/code
      ports:
        - "7000:8000"

最佳答案

如果您使用docker run my_web_app,它会立即退出,因为Dockerfile中没有CMD
正如其他人回答的那样,您可以运行docker-compose up重新运行容器。 docker-compose.yml文件包含启动容器所需的许多设置。仅docker-compose命令读取此文件;普通的docker run不会。
如果要使用普通的docker run命令运行此命令,则应执行以下两项操作:

  • command:中删除docker-compose.yml行;在您的CMD中添加相同的Dockerfile行。这使镜像具有可以运行的默认命令,而不必在每次运行命令时都指定它。
  • volumes:中删除docker-compose.yml;您已经在ADD中对应用程序进行了Dockerfile编码,因此您不想用主机中的随机内容覆盖它。

  • 这将使您拥有一个更简单的docker-compose.yml文件
    version: "3"
    services:
      web:
          build: .
          image: my_web_app  # (override the name Compose picks)
          ports:
            - "7000:8000"
    
    有了这个之后,您可以将其翻译成docker run命令
    docker run \
      -d \
      -p 7000:8000 \   # ports:
      my_web_app       # image:
    
    如果您还有其他选项(environment:volumes:,...),则需要将其转换为docker run选项。如果需要在容器之间进行通信,请添加Compose creates a default network for you并重新创建它。

    关于docker - 我如何在加载Docker容器后不运行docker-compose up的情况下运行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62917326/

    相关文章:

    mongodb - 无法使用 mongo 连接到 docker 容器

    docker - 我可以创建一个无法覆盖或删除文件和文件夹的 docker 卷吗?

    docker - 在私有(private)管道中设置 VSTS 代理的 docker 权限

    docker - kubectl 无法连接到 docker 注册表来下载镜像

    docker - "System limitation"在 docker for Windows 上启动 Windows 容器时

    mysql - 如何从 wordpress docker 建立数据库连接

    docker - Docker-在单个容器中处理多个服务

    mysql - 为 MySQL/Tomcat/Maven Java Webapp 创建 Docker 文件

    mongodb - 系统超时异常 : A timeout occurred after 30000ms MongoDb

    postgresql - docker-compose spring boot 无法连接到 Postgres