我需要通过合并"RabbitMQ-management“和"MongoDB”镜像来创建一个单独的docker镜像。有可能做到吗?
我试过使用下面的Dockerfile,可以访问RabbitMQ,但是mongodb不起作用。你能帮帮我吗?
# cat Dockerfile
FROM rabbitmq:3.7.17
RUN rabbitmq-plugins enable --offline rabbitmq_management
# extract "rabbitmqadmin" from inside the "rabbitmq_management-X.Y.Z.ez" plugin zipfile
# see https://github.com/docker-library/rabbitmq/issues/207
RUN apt-get update && apt-get install -y gnupg2
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18
RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
RUN set -eux; \
erl -noinput -eval ' \
{ ok, AdminBin } = zip:foldl(fun(FileInArchive, GetInfo, GetBin, Acc) -> \
case Acc of \
"" -> \
case lists:suffix("/rabbitmqadmin", FileInArchive) of \
true -> GetBin(); \
false -> Acc \
end; \
_ -> Acc \
end \
end, "", init:get_plain_arguments()), \
io:format("~s", [ AdminBin ]), \
init:stop(). \
' -- /plugins/rabbitmq_management-*.ez > /usr/local/bin/rabbitmqadmin; \
[ -s /usr/local/bin/rabbitmqadmin ]; \
chmod +x /usr/local/bin/rabbitmqadmin; \
apt-get update; apt-get install -y --no-install-recommends python ca-certificates; rm -rf /var/lib/apt/lists/*; \
rabbitmqadmin --version
EXPOSE 15671 15672 27017我正在使用下面的命令来运行RabbitMQ (它正在工作)
# docker run -it -p 15672:15672 -p 5672:5672 --hostname my-rabbitmq image启动Mongodb容器的命令(不起作用)
docker run -d -v /tmp/mongodb:/data/db -p 27017:27017 image mongod发布于 2020-04-24 13:56:16
要实现你所要求的并不是不可能的,但我会说这不是正确的方法。Docker提供了隔离,并声明它应该是每个容器一个进程。(应该,而不是必须)。
如果您遵循此概念,则很容易使用其他工具将多个容器放在一起。例如,您可以指定一个漂亮的docker-compose.yml,而不是复杂的Dockerfile来合并两个图像
version: '3'
services:
mongo:
image: mongod
volumes:
- /tmp/mongodb:/data/db
ports:
- "27017:27017"
rabbitmq:
image: rabbitmq
ports:
- "15672:15672"
- "5672:5672"
depends_on:
- mongo这是更具可读性的IMO,并可能达到相同的结果。
https://stackoverflow.com/questions/61401777
复制相似问题