mongo-init.js
)内的环境变量,然后将替换的数据移至启动时的输出路径。我尚未在Dockerfile中尚未替换的唯一文件是
.mongoshrc.js
,因为该文件应该在已安装的
$MONGO_DATA_DIR
(/data/db)卷中。因此,我必须在构建过程后进行替换。
Dockerfile
:
FROM mongo:5-focal
# Set arguments and environment variables
ARG my_custom_env_variable
ENV MY_CUSTOM_ENV_VARIABLE=$my_custom_env_variable
# Change user to root
USER root
# Copy .mongoshrc.js script and change permissions
COPY --chown=mongodb:mongodb ./.config/mongo/.mongoshrc.js /pre-configuration/.mongoshrc.js
RUN chmod 751 /pre-configuration/.mongoshrc.js
# Copy mongod.conf config and change permissions
COPY --chown=root:root ./.config/mongo/mongod.conf /pre-configuration/mongod.conf
RUN chmod 644 /pre-configuration/mongod.conf
# Copy mongo-init.js script and change permissions
COPY --chown=root:root ./.config/mongo/mongo-init.js /pre-configuration/mongo-init.js
RUN chmod 751 /pre-configuration/mongo-init.js
# Copy Docker Entrypoint bash script to Docker Entrypoint and change permissions
COPY --chown=root:root ./.config/docker/mongo/replace-script.sh /pre-configuration/replace-script.sh
RUN chmod 751 /pre-configuration/replace-script.sh
# Replace environment variables in mongod.conf and mongo-init.js and write to output destination
RUN /pre-configuration/replace-script.sh --input "/pre-configuration/mongod.conf" "/pre-configuration/mongo-init.js" --output "/etc/mongod.conf" "/docker-entrypoint-initdb.d/mongo-init.js"
# Start MongoDB Demon with custom configuration
CMD [ "mongod", "-f", "/etc/mongod.conf" ]
docker-compose.yml
:
version: '3.3'
services:
mongo:
build:
context: ./
dockerfile: ./config/docker/mongo/Dockerfile
args:
my_custom_env_variable: ${MY_CUSTOM_ENV_VARIABLE}
ports:
- "27017:27017"
volumes:
- ./.logs/mongo:${MONGO_LOG_DIR}
- ./mongo/data:${MONGO_DATA_DIR}
到现在为止,一切正常。但是,一旦我添加了命令说明(command: bash -c "/pre-configuration/replace-script.sh --input /pre-configuration/.mongoshrc.js --output ${MONGO_DATA_DIR}/.mongoshrc.js"
),该指令就应该替换.mongoshrc.js
中的环境变量,而不必记录任何内容(我正在使用
docker-compose.yml
)来不断重新启动容器。我尝试了该语句的不同变体,例如docker logs -f --tail 10 my_mongo_container
(bash脚本包含command: ["/pre-configuration/replace-script.sh", "--input", "/pre-configuration/.mongoshrc.js", "--output", "${MONGO_DATA_DIR}/.mongoshrc.js"]
),并且两个变体都没有参数内部的变量。当我使用
#!/bin/bash
容器启动设置时,不断重新启动设置时,但是创建了docker-compose up -d
内部的.mongoshrc.js
。
我在Windows 10(21H2),WSL2(Ubuntu 20.04.2 lts; GNU/Linux 5.4.72-Microsoft-standard-tastard-wsl2 X86_64)和Docker(4.9.1 81317)上运行此设置。
不幸的是,我对为什么会发生这种情况毫无意义。任何帮助将不胜感激!greetings, fmedv
**我从戴维·迷宫(David Maze)的回复中得知** *
docker容器在使用docker-compose.yml
中的自定义脚本使用`命令时都会不断重新启动ADocker容器仅运行一个程序,并且该程序是否退出容器也退出。当您覆盖命令时:您的repent-script.sh运行而不是mongoDB服务器。 - David Maze(Https://stackoverflow.com/users/10008173/david-maze
) 评论2022年8月15日,20:40*我遇到了同样的问题:容器在没有外壳脚本的情况下正常工作(矿山名称为r.sh)。 一旦添加脚本,它就开始重新启动。 解决方案: 我尝试在OpenVPN容器
中运行脚本
检查命令
输出中的CMD或入口点$MONGO_DATA_DIR
在我的docker-compose.yml文件中我有这个
docker inspect <your conainer name>
d:/test/openvpn/config是Windows中的文件夹 /etc/OpenVPN是Docker中的文件夹 现在将您的test.sh脚本放入主机的文件夹中 所以,我有d:/test/openvpn/config/r.sh
MyR.SH文件:
volumes:
- d:/test/openvpn/config:/etc/openvpn
在docker-compose.yml中添加stringentrypoint ...
#!/bin/bash
echo TEST
ip route add 192.168.55.0/24 dev eth0
字符串“ /etc/openvpn/r.sh && ovpn_run”运行我的命令,然后运行我的容器的cmd