Dockerfile连接到ODBC(例如HPE Vertica)设置

huangapple go评论115阅读模式
英文:

Dockerfile connect to ODBC(e.g. HPE Vertica) setup

问题

我有一个简单的GO程序,可以成功连接到我的Ubuntu服务器上的Vertica数据库。我已经在这个Ubuntu上设置了**.dobc.iniodbc驱动程序**。

  1. db, err := sql.Open("odbc", "DSN=HPVerticaDSN")
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. log.Println("DB ping started...")
  6. if err = db.Ping(); err != nil {
  7. log.Fatalf("DB ping failed with error...%v", err)
  8. }
  9. log.Println("DB connected.")
  10. defer db.Close()

现在,我该如何设置Dockerfile以在Docker容器中运行它?是否可以使用轻量级的基础镜像,比如alpine,还是必须使用ubuntu基础镜像?如果有示例,将不胜感激。

这是我的Dockerfile

  1. FROM alpine:latest
  2. MAINTAINER Prataksha Gurung <prataksha.gurung@mydomain.net>
  3. RUN apk add --no-cache ca-certificates
  4. ADD libverticaodbc.so /libverticaodbc.so
  5. ADD .odbc.ini ~/.odbc.ini
  6. ADD main /usr/bin/main
  7. ENTRYPOINT ["main"]

当我运行这个容器时,我得到以下错误:

  1. panic: standard_init_linux.go:178: exec user process caused "no such file or directory" [recovered]
  2. panic: standard_init_linux.go:178: exec user process caused "no such file or directory"
英文:

I have a simple GO program which successfully connects to Vertica in my ubuntu server. I have setup the .dobc.ini and odbc drvier in this ubuntu.

  1. db, err := sql.Open(&quot;odbc&quot;, &quot;DSN=HPVerticaDSN&quot;)
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. log.Println(&quot;DB ping started...&quot;)
  6. if err = db.Ping(); err != nil {
  7. log.Fatalf(&quot;DB ping failed with error...%v&quot;, err)
  8. }
  9. log.Println(&quot;DB connected.&quot;)
  10. defer db.Close()

Now, How do I setup the Dockerfile to run this in docker container. Is it possible to use light weight base image like alpine or we have to use ubuntu base image. Any examples would be greatly appreciated.

Here is my Dockerfile

  1. FROM alpine:latest
  2. MAINTAINER Prataksha Gurung &lt;prataksha.gurung@mydomain.net&gt;
  3. RUN apk add --no-cache ca-certificates
  4. ADD libverticaodbc.so /libverticaodbc.so
  5. ADD .odbc.ini ~/.odbc.ini
  6. ADD main /usr/bin/main
  7. ENTRYPOINT [&quot;main&quot;]

and I am getting

  1. panic: standard_init_linux.go:178: exec user process caused &quot;no such file or directory&quot; [recovered]
  2. panic: standard_init_linux.go:178: exec user process caused &quot;no such file or directory&quot;

when I run this container.

答案1

得分: 1

最终我成功地使用以下的dockerfile工作:

  1. FROM ubuntu:artful
  2. MAINTAINER Prataksha Gurung <prataksha.gurung@mydomain.net>
  3. RUN apt-get update
  4. RUN apt-get install -y curl
  5. # 下载适用于此docker环境的相关Linux驱动程序
  6. RUN curl -O https://my.vertica.com/client_drivers/8.1.x/8.1.1-0/vertica-client-8.1.1-0.x86_64.tar.gz
  7. RUN ls -la
  8. RUN tar vzxf vertica-client-8.1.1-0.x86_64.tar.gz && rm vertica-client-8.1.1-0.x86_64.tar.gz
  9. RUN apt-get install -y unixodbc-dev
  10. ADD .odbc.ini /root/.odbc.ini # --> 您的自定义DNS设置
  11. ADD vertica.ini /root/vertica.ini # --> 额外的ODBC驱动程序设置
  12. ADD main /usr/bin/main # --> 二进制可执行文件
  13. ENTRYPOINT ["main"]
英文:

Finally I managed it to work with this dockerfile:

  1. FROM ubuntu:artful
  2. MAINTAINER Prataksha Gurung &lt;prataksha.gurung@mydomain.net&gt;
  3. RUN apt-get update
  4. RUN apt-get install -y curl
  5. #downloading the relevant linux driver for this docker environment
  6. RUN curl -O https://my.vertica.com/client_drivers/8.1.x/8.1.1-0/vertica-client-8.1.1-0.x86_64.tar.gz
  7. RUN ls -la
  8. RUN tar vzxf vertica-client-8.1.1-0.x86_64.tar.gz &amp;&amp; rm vertica-client-8.1.1-0.x86_64.tar.gz
  9. RUN apt-get install -y unixodbc-dev
  10. ADD .odbc.ini /root/.odbc.ini #--&gt;your custom DNS setup
  11. ADD vertica.ini /root/vertica.ini #--&gt;extra odbc driver setup
  12. ADD main /usr/bin/main #--&gt;binary executable
  13. ENTRYPOINT [&quot;main&quot;]

huangapple
  • 本文由 发表于 2017年7月19日 19:54:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/45189777.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定