我目前在我的Docker容器设置中面临一些问题。

问题描述 投票:0回答:1
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

mongodb bash docker docker-compose windows-subsystem-for-linux
1个回答
0
投票

在我的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中添加string
entrypoint ...

#!/bin/bash echo TEST ip route add 192.168.55.0/24 dev eth0

字符串“ /etc/openvpn/r.sh && ovpn_run”运行我的命令,然后运行我的容器的cmd

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.