在构建nginx docker时出现错误。

7
我试图从一个 fork 上构建 Docker,但当执行 docker build ./ 命令时出现以下错误:
cc1: all warnings being treated as errors
make[1]: *** [objs/src/event/ngx_event_openssl.o] Error 1
objs/Makefile:748: recipe for target 'objs/src/event/ngx_event_openssl.o' failed
make[1]: Leaving directory '/tmp/nginx/nginx-1.8.0'
make: *** [install] Error 2

在安装时,我们运行以下命令:

apt-get -y install libpcre3-dev zlib1g-dev libssl-dev openssl build-essential wget

我在谷歌上找不到这个错误。以下是完整的错误信息,因为我找不到我需要研究的确切错误参考:

src/event/ngx_event_openssl.c: In function 'ngx_ssl_init':
src/event/ngx_event_openssl.c:112:5: error: 'OPENSSL_config' is deprecated [-Werror=deprecated-declarations]
     OPENSSL_config(NULL);
     ^~~~~~~~~~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from src/event/ngx_event_openssl.h:15,
                 from src/core/ngx_core.h:80,
                 from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/conf.h:92:1: note: declared here
 DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name))
 ^
src/event/ngx_event_openssl.c: In function 'ngx_ssl_rsa512_key_callback':
src/event/ngx_event_openssl.c:753:9: error: 'RSA_generate_key' is deprecated [-Werror=deprecated-declarations]
         key = RSA_generate_key(512, RSA_F4, NULL, NULL);
         ^~~
In file included from /usr/include/openssl/rsa.h:13:0,
                 from /usr/include/openssl/x509.h:31,
                 from /usr/include/openssl/ssl.h:50,
                 from src/event/ngx_event_openssl.h:15,
                 from src/core/ngx_core.h:80,
                 from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/rsa.h:193:1: note: declared here
 DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void
 ^
src/event/ngx_event_openssl.c: In function 'ngx_ssl_dhparam':
src/event/ngx_event_openssl.c:943:11: error: dereferencing pointer to incomplete type 'DH {aka struct dh_st}'
         dh->p = BN_bin2bn(dh1024_p, sizeof(dh1024_p), NULL);
           ^~
src/event/ngx_event_openssl.c: In function 'ngx_ssl_handshake':
src/event/ngx_event_openssl.c:1164:31: error: dereferencing pointer to incomplete type 'SSL {aka struct ssl_st}'
         if (c->ssl->connection->s3) {
                               ^~
src/event/ngx_event_openssl.c: In function 'ngx_ssl_connection_error':
src/event/ngx_event_openssl.c:1913:21: error: 'SSL_R_NO_CIPHERS_PASSED' undeclared (first use in this function)
             || n == SSL_R_NO_CIPHERS_PASSED                          /*  182 */
                     ^~~~~~~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c:1913:21: note: each undeclared identifier is reported only once for each function it appears in
src/event/ngx_event_openssl.c: In function 'ngx_ssl_session_cache':
src/event/ngx_event_openssl.c:2107:43: error: passing argument 2 of 'SSL_CTX_sess_set_get_cb' from incompatible pointer type [-Werror=incompatible-pointer-types]
         SSL_CTX_sess_set_get_cb(ssl->ctx, ngx_ssl_get_cached_session);
                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/event/ngx_event_openssl.h:15:0,
                 from src/core/ngx_core.h:80,
                 from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/ssl.h:637:6: note: expected 'SSL_SESSION * (*)(struct ssl_st *, const unsigned char *, int,  int *) {aka struct ssl_session_st * (*)(struct ssl_st *, const unsigned char *, int,  int *)}' but argument is of type 'SSL_SESSION * (*)(SSL *, u_char *, int,  int *) {aka struct ssl_session_st * (*)(struct ssl_st *, unsigned char *, int,  int *)}'
 void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
      ^~~~~~~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c: In function 'ngx_ssl_session_id_context':
src/event/ngx_event_openssl.c:2129:27: error: storage size of 'md' isn't known
     EVP_MD_CTX            md;
                           ^~
src/event/ngx_event_openssl.c:2195:5: error: implicit declaration of function 'EVP_MD_CTX_cleanup' [-Werror=implicit-function-declaration]
     EVP_MD_CTX_cleanup(&md);
     ^~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c: In function 'ngx_ssl_session_ticket_key_callback':
src/event/ngx_event_openssl.c:2864:9: error: 'RAND_pseudo_bytes' is deprecated [-Werror=deprecated-declarations]
         RAND_pseudo_bytes(iv, 16);
         ^~~~~~~~~~~~~~~~~
In file included from /usr/include/openssl/engine.h:19:0,
                 from src/event/ngx_event_openssl.h:22,
                 from src/core/ngx_core.h:80,
                 from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/rand.h:47:1: note: declared here
 DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num))
 ^
cc1: all warnings being treated as errors
make[1]: *** [objs/src/event/ngx_event_openssl.o] Error 1
objs/Makefile:748: recipe for target 'objs/src/event/ngx_event_openssl.o' failed
make[1]: Leaving directory '/tmp/nginx/nginx-1.8.0'
make: *** [install] Error 2

这是我正在运行的Docker分支 https://github.com/meteorhacks/mup-frontend-server
2个回答

4

您在这里遇到了各种错误和警告,但它们实际上与Docker或OpenSSL无关。如果我们剥离掉多余的信息,以下是您遇到的问题。

error: 'OPENSSL_config' is deprecated
error: 'RSA_generate_key' is deprecated
error: dereferencing pointer to incomplete type 'DH {aka struct dh_st}'
error: dereferencing pointer to incomplete type 'SSL {aka struct ssl_st}'
error: 'SSL_R_NO_CIPHERS_PASSED' undeclared (first use in this function)
error: passing argument 2 of 'SSL_CTX_sess_set_get_cb' from incompatible pointer type
error: storage size of 'md' isn't known
error: implicit declaration of function 'EVP_MD_CTX_cleanup'
error: 'RAND_pseudo_bytes' is deprecated

这里的核心问题可能是你在该项目中使用了过时版本的Nginx。从你指出的GitHub存储库中,在install-nginx.sh文件中:
NGINX_VERSION=1.8.0

目前Nginx的主线版本是1.13.2。我没有详细查看Nginx的更改日志,但根据您收到的错误,似乎在1.8版本和当前版本之间,OpenSSL已经废弃了Nginx 1.8所依赖的各种函数。最可能的解决方法是升级到最新版本的Nginx。

截至本文撰写时,1.13.2是当前主线版本,1.12.0是当前稳定版本。其中一个版本可能会更好地工作。无法确定是否可以直接使用它,您可能需要更改构建脚本或nginx配置以使较新版本正常工作。

谢谢你详细的回答,丹。我会研究一下这个。 - Allreadyhome
将nginx升级到1.12.0版本非常顺利。 - Allreadyhome

3

您之所以会收到此错误,是因为您的nginx版本不支持SSL 1.1.0。请升级NGINX版本或使用SSL 1.0.2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接