我创建了一个Dockerfile
和docker-compose.yml
文件。我可以在构建并运行Django Web应用程序的Windows 10上运行docker-compose up
。然后,我可以成功浏览到127.0.0.1:7000
并练习我的Web应用程序。
我的问题是,一旦退出,如何在不运行docker-compose up
的情况下启动图像?
当我键入docker images
时,我看到两个图像:python
和my_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.ymlversion: "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/