我有一个很小的docker-compose.yaml
文件,看起来像这样(它用于启动本地测试环境):
version: '2'
services:
ubuntu:
build:
context: ./build
dockerfile: ubuntu.dock
volumes:
- ./transfer:/home/
ports:
- "60000:22"
python:
build:
context: ./build
dockerfile: python.dock
volumes:
- .:/home/code
links:
- mssql
- ubuntu
mssql:
image: "microsoft/mssql-server-linux"
environment:
SA_PASSWORD: "somepassword"
ACCEPT_EULA: "Y"
ports:
- "1433:1433"
我遇到的问题是,当我运行docker-compose up
时,它在此步骤(位于python.dock
文件中)失败了:
Step 10/19 : RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
---> Running in e4963c91a05b
错误看起来像这样:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
More details here: http://curl.haxx.se/docs/sslcerts.html
python.dock
文件中失败的部分看起来像这样:
# This line fails
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
RUN apt-get update -y
过去我在curl / docker上遇到过问题-因为我们使用自签名证书在防火墙级别(网络要求)进行解密/加密;我可以为容器指定一个自签名证书吗?
这将使curl伸出并下载所需的文件。
我尝试运行类似docker-compose -f docker-compose.yaml --tlscert ~/certs/the-self-signed-ca.pem up
的程序,但是失败。
我该如何以编程方式进行一些操作,以便可以运行docker-compose up
?
答案 0 :(得分:1)
如果我正确理解它,则您的防火墙会破坏TLS加密,并使用来自本地CA的证书对其进行重新加密。我认为这通常是一个糟糕的情况,您应该以端到端为目标,但政治除外。
传递给--tlscert
的参数docker-compose
用于与docker守护程序通信,该守护程序可能在远程运行,默认情况下在端口2376上公开。在这种情况下,您的本地docker-compose
命令可在远程计算机上协调容器,包括构建映像。
对于您而言,curl
命令在容器内运行。它将使用python.dock
中基本映像安装的CA(通常)。要使用自定义CA,您需要
将CA证书复制到映像中的正确位置,例如
COPY the-self-signed-ca.pem /etc/ssl/certs/
确切步骤取决于您的基本映像。这将使证书在容器中可用。该证书很可能会被所有后续过程使用。其他开发者/用户可能不知道已安装了自定义CA,并且连接不安全!
将CA证书复制到映像中的自定义位置,例如
COPY the-self-signed-ca.pem /some/path/the-self-signed-ca.pem
并使用--cacert
参数明确告诉curl有关自定义CA的信息:
RUN curl --cacert /some/path/the-self-signed-ca.pem https://example.com/