如何解决我如何在Dockerfile上播放脚本并将参数传递给脚本
我有这个Dockerfile,我想将参数传递给脚本并在容器上运行它,由于某种原因,它将无法工作。 我使用ARG&ENV和ENTRYPOINT。
FROM jrei/systemd-ubuntu:18.04
MAINTAINER devops@carbyne911.com
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
vim \
apt-utils \
net-tools \
openjdk-8-jre \
linux-headers-generic \
libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-doc \
gstreamer1.0-tools \
gstreamer1.0-rtsp \
python-gst-1.0 \
python3-gst-1.0 \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libfontconfig1-dev \
libfreetype6-dev \
libpng-dev \
libcairo2-dev \
libjpeg-dev \
libgif-dev \
libgstreamer-plugins-base1.0-dev
ARG JAR_VERSION
ENV mfsVersion=$JAR_VERSION
RUN mkdir -p /home/ubuntu
COPY ./target/deployment/dependencies.tar.gz /home/ubuntu
COPY ./target/deployment/aws_install-docker.sh /home/ubuntu
COPY ./target/deployment/MediaForwardService-${JAR_VERSION}-standalone.jar /home/ubuntu
COPY ./target/deployment/MediaForwardService-${JAR_VERSION}-standalone.jar /home/ubuntu
COPY ./target/deployment/libMediaForwardRSL-${JAR_VERSION}.so /lib64/
COPY ./src/main/resources/application.conf /home/ubuntu
COPY ./target/deployment/systemctl3.py /usr/bin/systemctl
RUN test -L /bin/systemctl || ln -sf /usr/bin/systemctl /bin/systemctl
RUN chmod +x /usr/bin/systemctl
WORKDIR /home/ubuntu
RUN chmod +x aws_install-docker.sh
EXPOSE 8102
EXPOSE 16384
EXPOSE 32766
ENTRYPOINT ["/bin/bash","-c","/home/ubuntu/aws_install-docker.sh"]
CMD ["$mfsVersion"]
似乎我对我通过的论点有误。我在做什么错了?
解决方法
在您的设置中,您在CMD
中拥有的参数将作为参数传递给/bin/bash
而不是脚本,因此它将实际运行:
/bin/bash -c /home/ubuntu/aws_install-docker.sh $mfsVersion
代替
/bin/bash -c "/home/ubuntu/aws_install-docker.sh $mfsVersion"
您需要做的是删除CMD
并在ENTRYPOINT
中提供参数。
因此您可以使用:
ENTRYPOINT /bin/bash -c "/home/ubuntu/aws_install-docker.sh $mfsVersion"
但是,除非您有特殊的原因使用/bin/bash -c
,否则我只会这样做:
ENTRYPOINT /home/ubuntu/aws_install-docker.sh $mfsVersion
这是一个更简单的Dockerfile,用于实验:
FROM alpine
ARG JAR_VERSION="1.0"
ENV mfsVersion=$JAR_VERSION
ENTRYPOINT echo $mfsVersion
可以通过以下方式构建和运行:
$ docker build -t temp --build-arg JAR_VERSION=2.0 .
$ docker run --rm -it temp
2.0
最后,根据您的需要,您可能要使用ENTRYPOINT
或CMD
来完成该任务(但不能同时使用两者)。这是一个使用入口点脚本(而不是普通的echo
)和CMD
而不是ENTRYPOINT
的示例:
FROM alpine
ARG JAR_VERSION="1.0"
ENV mfsVersion=$JAR_VERSION
COPY ./entrypoint /entrypoint
RUN chmod +x /entrypoint
CMD /entrypoint $mfsVersion
和entrypoint
示例脚本:
#!/usr/bin/env sh
echo "Params: $*"
为此使用CMD
的好处是,您仍可以在需要时使用docker run image-name bash
进入容器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。