gpt4 book ai didi

curl - 在运行容器时成功使用 curl

转载 作者:行者123 更新时间:2023-12-02 19:37:21 29 4
gpt4 key购买 nike

我正在尝试使用 Docker 构建和运行 Marklogic 实例。 Marklogic 提供了一些不错的 http api,所以,作为最终 CMD在 Dockerfile 中,我运行两个脚本,它们通过 curl 执行一些 http 请求在容器启动时正确配置 Marklogic 的实例。但是当我运行我的图像时,

docker run -p 7997-8002:7997-8002 --name gi-ml-container -e USER=admin -e PASSWORD=admin -e REALM=public -e HOST=gi-ml-container gi-marklogic

我收到了这个错误:
0curl: (6) Could not resolve host: gi-ml-container; Name or service not known

我认为conainer的名字应该足够了。我该怎么办 curl到我通过 Dockerfile 运行的容器?这是正确的方法吗?
我正在使用 Docker 1.12.6,在 Ubuntu 16.04 上构建 78d1802。这是我的 Dockerfile:
FROM centos:centos7
ARG USER=admin
ARG PASSWORD=admin
ARG REALM=public
ARG HOST=localhost
RUN yum -y install glibc.i686 gdb.x86_64 redhat-lsb.x86_64 && yum clean all
RUN yum -y install initscripts && yum clean all
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/MarkLogic/mlcmd/bin
COPY MarkLogic-RHEL7-8.0-6.3.x86_64.rpm /tmp/MarkLogic-RHEL7-8.0-6.3.x86_64.rpm
COPY marklogic.admin.setup.sh /tmp/marklogic.admin.setup.sh
COPY marklogic.init.database.sh /tmp/marklogic.init.database.sh
RUN chmod +x /tmp/*.sh
RUN yum -y install /tmp/MarkLogic-RHEL7-8.0-6.3.x86_64.rpm
RUN rm /tmp/MarkLogic-RHEL7-8.0-6.3.x86_64.rpm
EXPOSE 7997 7998 7999 8000 8001 8002
CMD /etc/init.d/MarkLogic start && ./tmp/marklogic.init.database.sh -h $HOST && ./tmp/marklogic.admin.setup.sh -u $USER -p $PASSWORD -r $REALM -h $HOST && tail -f /dev/null

这个 Dockerfile 使用了两个 .sh文件以在容器启动时配置 Marklogic 实例。这是 marklogic.init.database.sh :
TIMESTAMP=`curl -d "" -X POST http://${HOST}:8001/admin/v1/init`

这是我的 marklogic.admin.setup.sh :
TIMESTAMP=`$CURL -X POST -H
"Content-type: application/x-www-form-urlencoded" \
--data "admin-username=${USER}" --data "admin-password=${PASS}" \
--data "realm=${SEC_REALM}" \
http://${HOST}:8001/admin/v1/instance-admin`

我非常关注 Maklogic 在几篇关于如何执行此操作的精彩文章中所展示的内容 herehere .

最佳答案

一些事情:

1) 您必须使用 -h 指定主机名docker run 中的选项: -h gi-ml-container-d

docker run -p 7997-8002:7997-8002 --name gi-ml-container -e USER=admin -e PASSWORD=admin -e REALM=public -e HOST=gi-ml-container-d -h gi-ml-container-d gi-marklogic

所以你可以在不使用 $HOST 的情况下更改你的 Dockerfile 和脚本。 ,但它们只需添加 -hdocker run .

2) 当你开始 MarkLogic作为一项服务,它太快地交还控制权,所以当下一个命令运行时它还没有运行。所以添加一个 sleep 来延迟它:
CMD /etc/init.d/MarkLogic start && sleep 5 && /tmp/marklogic.init.database.sh -h $HOST && sleep 5 && /tmp/marklogic.admin.setup.sh -u $USER -p $PASSWORD -r $REALM -h $HOST && tail -f /dev/null

3) 在 marklogic.admin.setup.sh脚本确保 $CURL不是空的。可能你可以直接写 curl在里面。另外(可能已经正确,只是复制和粘贴问题)请确保 "Content type..."-X POST -H 在同一行(或将其与 \ 连接起来,就像您在以下几行中所做的那样)
TIMESTAMP=`curl -X POST -H "Content-type: application/x-www-form-urlencoded" \
--data "admin-username=${USER}" --data "admin-password=${PASS}" \
--data "realm=${SEC_REALM}" \
http://${HOST}:8001/admin/v1/instance-admin`

4) 最后,尽管它不应该有任何影响,因为您在 /tmp 中为脚本使用绝对路径名, 你不需要把 .在他们之前(所以不是 ./tmp/marklogic.init.database.sh 而是 /tmp/marklogic.init.database.sh 就足够了,并且它不受您的工作目录的依赖。

关于curl - 在运行容器时成功使用 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43340487/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com