Mysql Docker compose不执行.sql

Mysql Docker compose不执行.sql,mysql,sql,import,docker-compose,sql-scripts,Mysql,Sql,Import,Docker Compose,Sql Scripts,尝试为我的应用程序使用docker compose,因此使用官方mysql图像和我自己的Dockerfile来创建我的应用程序图像。我想我的initdb.sql是如何在docker编写期间不执行的 以以下方式运行此操作: docker-compose up --build 但是我看不到执行了initdb.sql 我的docker compose如下所示: version: "3" services: db: image: mysql:5.7 restart: always

尝试为我的应用程序使用docker compose,因此使用官方mysql图像和我自己的Dockerfile来创建我的应用程序图像。我想我的
initdb.sql
是如何在docker编写期间不执行的

以以下方式运行此操作:

docker-compose up --build
但是我看不到执行了
initdb.sql

我的docker compose如下所示:

version: "3"
services:
  db:
    image: mysql:5.7
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_DATABASE: "MYDB"
      MYSQL_USER: "myuser"
      MYSQL_PASSWORD: "mypassword"
      MYSQL_ROOT_PASSWORD: "mypassword"
    ports:
      - "3306:3306"
    expose:
      - "3306"
    volumes:
      - my-db:/var/lib/mysql
      - ./sqlinit:/docker-entrypoint-initdb.d/initdb.sql
    networks:
      vpcbr:
        ipv4_address: 10.5.0.6
  app:
    restart: always
    build: .
    ports:
      - 5000:5000
    volumes:
      - .:/app
    depends_on:
      - db
    networks:
      vpcbr:
        ipv4_address: 10.5.0.5

volumes:
  my-db:

networks:
  vpcbr:
    driver: bridge
    ipam:
      config:
        - subnet: 10.5.0.0/16
        #  gateway: 10.5.0.1
正如您所看到的,我的
initdb.sql
在这个目录
/sqlinit
中,在我登录到mysql容器之后,我可以在
/docker entrypoint initdb.d/initdb.sql
中看到这个文件

但似乎没有执行,因为当我登录到我的应用程序时,我可以看到:

pymysql.err.OperationalError:(1044,“拒绝用户'myuser'@%'访问数据库'MYDB')

容器mysql上的

2019-09-15T13:17:59.361447Z 2[注意]用户“%”myuser“%”对数据库“MYDB”的访问被拒绝


当然我做错了什么,我在这里发现了一些类似的问题,但我仍然没有解决我的问题

问题应该出在您映射卷的方式上。您应该将源文件映射到目标文件中,而不是将源文件夹映射到文件中,如下所示:

- ./sqlinit/initdb.sql:/docker-entrypoint-initdb.d/initdb.sql

你好@picadoh,谢谢你的评论。我不认为这是一个问题,因为脚本位于container/docker-entrypoint-initdb.d/initdb.sql上,我认为不需要在./sqlinit中指定任何文件。我可以有更多的*.sql,所有的都应该执行。不管怎样,我确实尝试了您的解决方案,并且遇到了相同的问题:(您是否为mysql容器运行了
docker compose logs
?只是为了确保它在启动时没有记录任何错误。也值得与root用户一起登录mysql,只是为了确保创建内容。这可能只是因为没有向该用户授予正确的权限。或者手动运行该脚本以了解是否存在错误。)这是脚本本身的问题。嗨@picadoh,我想我知道出了什么问题:(因为我曾经多次尝试创建卷——我猜。现在删除了卷
my db
,运行docker compose-up——build,我看不到相同的错误,我可以看到其他错误,比如一些表没有创建,但这是另一个问题。创建了db和其他东西,所以执行了脚本。所以在我的情况下,我应该永远删除卷。)y当我在docker-compose.yml中更改某些内容时-谢谢抱歉我设置得太早,但看起来我可以看到此错误db|u 1 |/usr/local/bin/docker-entrypoint.sh:running/docker-entrypoint-initdb.d/initdb.sql db|1 | mysql:[警告]在命令行界面上使用密码可能不安全。db_1|错误:无法初始化批处理读取行-可能是输入源是目录或块设备。