如何在 docker 上正确 运行 入口点 bash 脚本?
How to properly run entrypoint bash script on docker?
我想构建一个 docker 图像,用于使用 bcp
工具将大型 SQL 服务器 tables 转储到 S3 中,方法是结合此 docker and this script .理想情况下,我可以将 table、数据库、用户、密码和 s3 路径作为参数传递给 docker run
命令。
脚本看起来像
#!/bin/bash
TABLE_NAME=
DATABASE=
USER=
PASSWORD=
S3_PATH=
# read sqlserver...
# write to s3...
# .....
Dockerfile 是:
# SQL Server Command Line Tools
FROM ubuntu:16.04
LABEL maintainer="SQL Server Engineering Team"
# apt-get and system utilities
RUN apt-get update && apt-get install -y \
curl apt-transport-https debconf-utils \
&& rm -rf /var/lib/apt/lists/*# SQL Server Command Line Tools
FROM ubuntu:16.04
LABEL maintainer="SQL Server Engineering Team"
# apt-get and system utilities
RUN apt-get update && apt-get install -y \
curl apt-transport-https debconf-utils \
&& rm -rf /var/lib/apt/lists/*
# adding custom MS repository
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
# install SQL Server drivers and tools
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools awscli
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN /bin/bash -c "source ~/.bashrc"
ADD ./sql2sss.sh /opt/mssql-tools/bin/sql2sss.sh
RUN chmod +x /opt/mssql-tools/bin/sql2sss.sh
RUN apt-get -y install locales
RUN locale-gen en_US.UTF-8
RUN update-locale LANG=en_US.UTF-8
ENTRYPOINT ["/opt/mssql-tools/bin/sql2sss.sh", "DB.dbo.TABLE", "SQLSERVERDB", "USER", "PASSWORD", "S3PATH"]
如果我用 -it
替换 CMD /bin/bash
和 运行 图像的入口点,我可以手动 运行 和 sql2sss.sh
并且它工作正常,读取和写入 s3。但是,如果我尝试使用如图所示的入口点 bcp: command not found
.
我还注意到,如果我在迭代模式下使用 CMD /bin/sh
,它会产生同样的错误。我是否缺少一些配置以便 运行 脚本的入口点正确?
你试过了吗
ENV PATH="/opt/mssql-tools/bin:${PATH}"
而不是导出 bashrc?
正如 David Maze 指出的那样docker 不读取点文件
基本上在 ENV
原语中添加您的环境定义
我想构建一个 docker 图像,用于使用 bcp
工具将大型 SQL 服务器 tables 转储到 S3 中,方法是结合此 docker and this script .理想情况下,我可以将 table、数据库、用户、密码和 s3 路径作为参数传递给 docker run
命令。
脚本看起来像
#!/bin/bash
TABLE_NAME=
DATABASE=
USER=
PASSWORD=
S3_PATH=
# read sqlserver...
# write to s3...
# .....
Dockerfile 是:
# SQL Server Command Line Tools
FROM ubuntu:16.04
LABEL maintainer="SQL Server Engineering Team"
# apt-get and system utilities
RUN apt-get update && apt-get install -y \
curl apt-transport-https debconf-utils \
&& rm -rf /var/lib/apt/lists/*# SQL Server Command Line Tools
FROM ubuntu:16.04
LABEL maintainer="SQL Server Engineering Team"
# apt-get and system utilities
RUN apt-get update && apt-get install -y \
curl apt-transport-https debconf-utils \
&& rm -rf /var/lib/apt/lists/*
# adding custom MS repository
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
# install SQL Server drivers and tools
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools awscli
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN /bin/bash -c "source ~/.bashrc"
ADD ./sql2sss.sh /opt/mssql-tools/bin/sql2sss.sh
RUN chmod +x /opt/mssql-tools/bin/sql2sss.sh
RUN apt-get -y install locales
RUN locale-gen en_US.UTF-8
RUN update-locale LANG=en_US.UTF-8
ENTRYPOINT ["/opt/mssql-tools/bin/sql2sss.sh", "DB.dbo.TABLE", "SQLSERVERDB", "USER", "PASSWORD", "S3PATH"]
如果我用 -it
替换 CMD /bin/bash
和 运行 图像的入口点,我可以手动 运行 和 sql2sss.sh
并且它工作正常,读取和写入 s3。但是,如果我尝试使用如图所示的入口点 bcp: command not found
.
我还注意到,如果我在迭代模式下使用 CMD /bin/sh
,它会产生同样的错误。我是否缺少一些配置以便 运行 脚本的入口点正确?
你试过了吗
ENV PATH="/opt/mssql-tools/bin:${PATH}"
而不是导出 bashrc?
正如 David Maze 指出的那样docker 不读取点文件
基本上在 ENV
原语中添加您的环境定义