当我没有使用 Docker 的 Js 时,为什么 s3fs 显示“无效选项 -- 'j'”?

问题描述

我正在构建一个 docker 镜像,它有一个必须作为 S3 文件夹挂载的日志文件。我正在使用 s3fs 作为技巧;但是,我无法运行它,我不断收到此错误

s3fs: 无效选项 -- 'j'

这是我的 Dockerfile 的一个示例:

FROM openjdk:11
RUN mkdir /home/app/
workdir /home/app/
RUN mkdir logs
copY ./target/MY_JAVA_APP.jar .

ENV AWS_ACCESS_KEY_ID=MY_KEY_ID
ENV AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY
ENV AWS_REGION=MY_REGION

RUN apt-get update
RUN apt install s3fs -y

ARG S3_MOUNT_DIRECTORY=/home/app/logs
ENV S3_MOUNT_DIRECTORY=$S3_MOUNT_DIRECTORY
ARG S3_BUCKET_NAME=MY_BUCKET
ENV S3_BUCKET_NAME=$S3_BUCKET_NAME

RUN echo $AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY > /root/.passwd-s3fs && \
    chmod 600 /root/.passwd-s3fs

EXPOSE 8080

CMD ["java","-jar","MY_JAVA_APP.jar"]

ENTRYPOINT ["s3fs","MY_BUCKET:/logs","/home/app/logs","-o","dbglevel=info","-f","curldbg"]

我在任何地方都没有任何 j,我不知何故被卡住了。我什至在 GitHub 中问了没有可能的答案。

附注:

重要事项:

  1. 这是一个概念证明。
  2. 此项目不会在 Docker Hub 中发布。我们有一个私人存储库。
  3. 我计划将凭证移至 AWS 中的 Secrets。

解决方法

我的解决方案,感谢 Charles Duffy 提示。

  1. 我创建了一个 sh 文件 (start.sh),其中包含:
#REMEMBER. Take care with the Unix break lines if you use Windows or macOS.
#!/bin/sh
#The & is important to run s3fs in the background.
s3fs MY_BUCKET:/logs /home/app/logs &
java -jar MY_JAVA_APP.jar
  1. 我在 Dockerfile 中添加了这些代码行:
COPY start.sh .

#the 777 must be changed,but I just needed to test to know if it worked.
RUN chmod 777 /home/app/start.sh

ENTRYPOINT ["sh","start.sh"]
  1. 我使用 --privileged 标志运行 docker。