首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在创建映像后,Docker容器不会运行

在创建映像后,Docker容器不会运行
EN

Stack Overflow用户
提问于 2022-04-27 12:23:33
回答 1查看 220关注 0票数 -1

我是新来的码头工人,所以很抱歉我缺乏知识。

我正在创建的Docker用于Python项目。我还用芹菜,RabbitMQ和MySQL。为此,我创建了一个Dockerfile:

代码语言:javascript
复制
# A dockerfile must always start by importing the base image.
FROM ubuntu:20.04

# Identify myself as the maintainer:
LABEL maintainer="blah-blah@blah.com"

# Set Timezone
ENV TZ=Europe/London
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Add the "all Python versions" repo:
RUN apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get -y install python3.8
RUN apt-get -y install python3-pip 
RUN apt-get autoremove -y
RUN python3 -m pip install --upgrade pip
RUN pip install setuptools==58

# Create a folder for the Match requirements file:
RUN mkdir /install
WORKDIR /install
# Copy the requirements file:
COPY reqs.txt /install

# Install the requirements using PIP
RUN pip3 install --no-deps -r reqs.txt

# Installing MySQL Server
RUN apt-get -y install mysql-server

# Install RabbitMQ
COPY rabbit-mq-install.sh /install
RUN chmod +x rabbit-mq-install.sh
RUN sh rabbit-mq-install.sh

# Expose the port 8888 for Django Server and expose 3306 for MySQL
EXPOSE 8888
EXPOSE 3306

# Running services@
CMD service mysql start && /etc/init.d/rabbitmq-server start

# Setting Bash as the entry
ENTRYPOINT /bin/bash

然后,我使用以下方法构建映像:

代码语言:javascript
复制
docker build -t [MYNAME] .

并尝试使用以下方法启动容器:

代码语言:javascript
复制
docker run  -i -t [MYNAME]

我可以看到这会创建一个新的容器,但是它不会继续运行。

我还在Mac上使用了Docker桌面应用程序,这意味着我可以运行实例,但我已经安装和尝试启动的服务没有运行。

感谢你的帮助和建议!

//编辑,因为我需要在图像名之前使用-it。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-27 12:40:17

谢谢,虽然这实际上是正确地将我放入shell中,但我仍然没有看到我的服务正在运行。-

当您在命令行上传递参数时(如/bin/bash),您将覆盖Dockerfile中的CMD设置。如果您希望容器中有一个shell,并且希望您的服务启动,那么您可以在不提供任何附加参数的情况下对映像进行docker run,然后使用docker exec在运行的容器中启动一个shell .

...but --这并不能解决您的问题,因为您试图使用service命令与initsystemd这样的服务管理器进行交互,并且容器中没有一个在运行。在容器中运行的唯一进程是那些通过ENTRYPOINTCMD条目显式启动的进程。

对于你正在做的事情--从mysql和rabbitmq开始--一个更好的解决方案是将官方图像用于这些工具:

例如,如果要为运行mysql设计自己的映像,则CMD条目如下所示:

代码语言:javascript
复制
CMD ["mysqld"]

...but --如果您查看从官方形象,您会注意到首先会发生大量的初始化,主要是在入口点脚本中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72028648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档