Docker:无法连接到其他容器

发布于 2025-01-20 22:10:49 字数 2753 浏览 1 评论 0原文

![图片|690x402](上传://nU943fLQhXqbw3DkuXC2qfP373c.png)

docker-compose.yml

version: '3'

volumes:
  wp-assets:

services:
  mariadb:
    build: ./requirements/mariadb
    environment:
      - MYSQL_ROOT_HOST=${MYSQL_ROOT_HOST}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}

    ports:
      - "127.0.0.1:3306:3306"
      - "127.0.0.1:9999:9999" # test

  wordpress:
    environment:
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
      - WORDPRESS_TABLE_PREFIX=${WORDPRESS_TABLE_PREFIX}
      - WORDPRESS_AUTH_KEY=${WORDPRESS_AUTH_KEY}
      - WORDPRESS_SECURE_AUTH_KEY=${WORDPRESS_SECURE_AUTH_KEY}
      - WORDPRESS_LOGGED_IN_KEY=${WORDPRESS_LOGGED_IN_KEY}
      - WORDPRESS_NONCE_KEY=${WORDPRESS_NONCE_KEY}
      - WORDPRESS_AUTH_SALT=${WORDPRESS_AUTH_SALT}
      - WORDPRESS_SECURE_AUTH_SALT=${WORDPRESS_SECURE_AUTH_SALT}
      - WORDPRESS_LOGGED_IN_SALT=${WORDPRESS_LOGGED_IN_SALT}
      - WORDPRESS_NONCE_SALT=${WORDPRESS_NONCE_SALT}
    volumes:
      - wp-assets:/var/wp-assets
    build: ./requirements/wordpress
    ports:
      # host_port == 127.0.0.1:9000, allow only localhost
      - "127.0.0.1:9000:9000"

  nginx:
    #    image: nginx:latest
    depends_on: 
      - wordpress
    volumes:
      - wp-assets:/var/wp-assets
    build: ./requirements/nginx
    ports:
      # host_port == 0.0.0.0:8080, allow all interfaces
      - "8080:80"

mariadb/Dockerfile

FROM debian:buster

# install mariadb-server
RUN apt update && apt install -y mariadb-server

# allow connection from wordpress (host name)
RUN sed -e 's/127.0.0.1/wordpress/' \
        -i '/etc/mysql/mariadb.conf.d/50-server.cnf'

# used for socket
RUN mkdir -p /var/run/mysqld && \
    chown -R mysql:mysql /var/lib/mysql /var/run/mysqld && \
    chmod 777 /var/run/mysqld && \ 
    touch /var/run/mysqld/mysqld.sock

# init db here

COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh

#ENTRYPOINT ["/docker-entrypoint.sh"]
ENTRYPOINT ["tail", "-f"]

我试图将 mariadbwordpress (mariadb-client) 连接,并得到一个错误: 无法连接到“mariadb”上的 MySQL 服务器

所以我测试的端口是好的。但是,虽然其他容器可以访问 nginx:80wordpress:9000 等其他端口,但 mariadb 的端口拒绝连接。

我无法弄清楚 mariadb 容器和其他容器之间有什么区别。有什么问题吗?

![image|690x402](upload://nU943fLQhXqbw3DkuXC2qfP373c.png)

docker-compose.yml

version: '3'

volumes:
  wp-assets:

services:
  mariadb:
    build: ./requirements/mariadb
    environment:
      - MYSQL_ROOT_HOST=${MYSQL_ROOT_HOST}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}

    ports:
      - "127.0.0.1:3306:3306"
      - "127.0.0.1:9999:9999" # test

  wordpress:
    environment:
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
      - WORDPRESS_TABLE_PREFIX=${WORDPRESS_TABLE_PREFIX}
      - WORDPRESS_AUTH_KEY=${WORDPRESS_AUTH_KEY}
      - WORDPRESS_SECURE_AUTH_KEY=${WORDPRESS_SECURE_AUTH_KEY}
      - WORDPRESS_LOGGED_IN_KEY=${WORDPRESS_LOGGED_IN_KEY}
      - WORDPRESS_NONCE_KEY=${WORDPRESS_NONCE_KEY}
      - WORDPRESS_AUTH_SALT=${WORDPRESS_AUTH_SALT}
      - WORDPRESS_SECURE_AUTH_SALT=${WORDPRESS_SECURE_AUTH_SALT}
      - WORDPRESS_LOGGED_IN_SALT=${WORDPRESS_LOGGED_IN_SALT}
      - WORDPRESS_NONCE_SALT=${WORDPRESS_NONCE_SALT}
    volumes:
      - wp-assets:/var/wp-assets
    build: ./requirements/wordpress
    ports:
      # host_port == 127.0.0.1:9000, allow only localhost
      - "127.0.0.1:9000:9000"

  nginx:
    #    image: nginx:latest
    depends_on: 
      - wordpress
    volumes:
      - wp-assets:/var/wp-assets
    build: ./requirements/nginx
    ports:
      # host_port == 0.0.0.0:8080, allow all interfaces
      - "8080:80"

mariadb/Dockerfile

FROM debian:buster

# install mariadb-server
RUN apt update && apt install -y mariadb-server

# allow connection from wordpress (host name)
RUN sed -e 's/127.0.0.1/wordpress/' \
        -i '/etc/mysql/mariadb.conf.d/50-server.cnf'

# used for socket
RUN mkdir -p /var/run/mysqld && \
    chown -R mysql:mysql /var/lib/mysql /var/run/mysqld && \
    chmod 777 /var/run/mysqld && \ 
    touch /var/run/mysqld/mysqld.sock

# init db here

COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh

#ENTRYPOINT ["/docker-entrypoint.sh"]
ENTRYPOINT ["tail", "-f"]

I was trying to connect mariadb with wordpress (mariadb-client), and got an error :
Can't connect to MySQL server on 'mariadb'

So I tested ports are good. But while other ports like nginx:80 or wordpress:9000 can be accessed by the other containers, ports of mariadb refuses connections.

I couldn't figure out what is difference between mariadb container and the others. What's the problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福丶如此 2025-01-27 22:10:49

MariaDB Dockerfile 的 ENTRYPOINT 是

ENTRYPOINT ["tail", "-f"]

这样的,因此它实际上并不运行 MariaDB。

您可能需要将其注释掉并重新注释

ENTRYPOINT ["/docker-entrypoint.sh"]

The ENTRYPOINT of your MariaDB Dockerfile is

ENTRYPOINT ["tail", "-f"]

so it doesn't actually run MariaDB.

You probably need to comment that out and comment back in

ENTRYPOINT ["/docker-entrypoint.sh"]
雪化雨蝶 2025-01-27 22:10:49

我对港口感到困惑。我认为每个容器都可以通过打开端口进行通信,但是没有 ing端口。 docker-compose 端口:仅绑定端口,与listing无关。

I was confused about ports. I thought that each containers could communicate by just opening ports, but there was no LISTENing ports. Docker-compose ports: just binds ports and has nothing to do with LISTEN.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文